#include using namespace std; const long long mod = 167'772'161; long long dp[810][810]; long long dp2[810][810]; void solve() { int n, k; scanf("%d%d", &n, &k); for (int i = 0; i <= n; ++i) { for (int j = 0; j <= 2 * k; ++j) { dp[i][j] = 0; dp2[i][j] = 0; } } dp[0][0] = 1; vector v; for (int i = 0; i < n; ++i) { int x; scanf("%d", &x); v.push_back(x); for (int l = n; l >= 1; --l) { for (int j = 2 * k; j >= x; --j) { dp[l][j] = (dp[l][j] + dp[l - 1][j - x]) % mod; } } } //for (int i = 0; i <= n; ++i) { //for (int j = 0; j <= 2 * k; ++j) { //cout << dp[i][j] << " "; //} //cout << endl; //} for (int i = 0; i < n; ++i) { int x = v[i]; for (int l = 0; l <= n; ++l) { for (int j = 0; j <= 2 * k; ++j) { dp2[l][j] = dp[l][j]; } } for (int l = 1; l <= n; ++l) { for (int j = x; j <= 2 * k; ++j) { dp2[l][j] = (dp2[l][j] - dp2[l - 1][j - x] + mod) % mod; } } for (int l = 1; l < n; ++l) { long long sum = 0; for (int j = max(1, k - x + 1); j <= k; ++j) { sum += dp2[l][j]; } sum %= mod; if (l > 1) { printf(" "); } printf("%lld", sum); } printf("\n"); } } int main() { int tt = 1; //scanf("%d", &tt); for (int ii = 0; ii < tt; ++ii) { solve(); } return 0; }