/*#pragma GCC target ("avx2") #pragma GCC optimize ("O3") #pragma GCC optimize ("unroll-loops")*/ #include #define bit(n, i) (((n)>>(i))&1) #define cat(x) cout << #x << " = " << x << "\n" #define pb push_back #define mp make_pair #define se second #define fi first #define inf 2000000000 #define llinf 2000000000000000000LL #define forn(i, a, b) for(ll i = (a); i <= (b); ++i) #define all(x) (x).begin(), (x).end() #define ppc(x) __builtin_popcount(x) using namespace std; typedef long long ll; typedef double ld; typedef pair i2; typedef vector vi; typedef vector vll; const ll mod = 167772161; inline ll add(ll a, ll b) { a += b; if(a >= mod) a -= mod; return a; } inline ll sub(ll a, ll b) { return add(a, mod-b); } inline ll mul(ll a, ll b) { return a*b%mod; } const int N = 409; int W[N]; ll dp[N][2*N]; int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n, k; cin >> n >> k; dp[0][0] = 1; forn(i, 1, n) { cin >> W[i]; for(int j = n; j >= 1; --j) { for(int w = 2*k; w >= W[i]; --w) { dp[j][w] = add(dp[j][w], dp[j-1][w-W[i]]); } } } forn(i, 1, n) { for(int j = 1; j <= n; ++j) { for(int w = W[i]; w <= 2*k; ++w) { dp[j][w] = sub(dp[j][w], dp[j-1][w-W[i]]); } } for(int j = 1; j < n; ++j) { ll res = 0; for(int w = 0; w <= 2*k; ++w) { if(w <= k && w+W[i] > k) res = add(res, dp[j][w]); } cout << res << " "; } cout << "\n"; for(int j = n; j >= 1; --j) { for(int w = 2*k; w >= W[i]; --w) { dp[j][w] = add(dp[j][w], dp[j-1][w-W[i]]); } } } return 0; }