#include using namespace std; #define REP(i, n) for(int i = 0; i < (n); i++) typedef long long int ll; const int mod = 167772161; const int maxn = 410; int dp[maxn][maxn]; int add(int a, int b) { a += b; if(a >= mod) a -= mod; if(a < 0) a += mod; return a; } int main() { ios::sync_with_stdio(0); cin.tie(0); int n, k; cin >> n >> k; vector svi(n); REP(i, n) cin >> svi[i]; dp[0][0] = 1; REP(i, n) { for(int j = n - 1; j; j--) { REP(l, k + 1) { if(l < svi[i]) continue; dp[l][j] += dp[l - svi[i]][j - 1]; } } } //REP(i, k + 1) { //REP(j, n) { //cout << dp[i][j] << " "; //} //cout << endl; //} REP(i, n) { vector tez, kop; REP(j, svi[i]) tez.push_back(k - j); for(int j = 1; j < n; j++) { int rj = 0; kop = tez; while(kop.size()) { bool z = 1; int br = j; while(kop.back() >= 0 && br >= 0) { if(z) rj = add(rj, dp[kop.back()][br]); else rj = add(rj, -dp[kop.back()][br]); kop.back() -= svi[i]; z = !z; br--; } kop.pop_back(); } cout << rj << " "; } cout << "\n"; } return 0; }