#include #include static unsigned int W[400]; static unsigned int T[512][512] __attribute__ ((aligned(4096))); int main() { unsigned int n = 0, k = 0; scanf("%u %u", &n, &k); for (unsigned int i = 0; i < n; i++) scanf("%d", &W[i]); for (unsigned int i = 0; i < n; i++) { memset(T, 0, sizeof(T)); for (unsigned int l = 0, w = W[i]; l < w; l++) T[l][0] = 1; for (unsigned int a = 0; a < n; a++) { if (a == i) continue; unsigned int w = W[a]; for (unsigned int l = k; l >= w; l--) { unsigned int *dp = &T[l][1]; const unsigned int *sp = &T[l-w][0]; for (unsigned int j = 1; j < n; j++) { *dp = (*dp + *sp) % 167772161; dp++; sp++; } } } for (int j = 1; j < n; j++) { if (j != 1) printf(" "); printf("%d", T[k][j]); } printf("\n"); } return 0; }