#include using namespace std; const int N = 405; const int mod = 167772161; vector> dp, new_dp; array w; int k, n; inline void addModulo(int& a, int b) { if (b >= mod) { b -= mod; } a += b; while (a >= mod) { a -= mod; } } inline void del(int cnt, int guy) { for (int i = w[guy]; i <= k; i++) { addModulo(dp[cnt][i], mod - dp[cnt - 1][i - w[guy]]); } } inline void add(int cnt, int guy) { for (int i = 0; i + w[guy] <= k; i++) { addModulo(dp[cnt][i + w[guy]], dp[cnt - 1][i]); } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> k; for (int i = 0; i < n; i++) { cin >> w[i]; } dp.resize(n + 1, vector(k + 1, 0)); dp[0][0] = 1; for (int i = 0; i < n; i++) { new_dp = dp; for (int cnt = 0; cnt <= i; cnt++) { for (int sum = 0; sum <= k; sum++) { if (sum + w[i] > k) { continue; } addModulo(new_dp[cnt + 1][sum + w[i]], dp[cnt][sum]); } } dp = new_dp; } vector> ans(n, vector(n, 0)); for (int cnt = 1; cnt < n; cnt++) { for (int guy = 0; guy < n; guy++) { del(cnt, guy); for (int i = k; i + w[guy] > k; i--) { addModulo(ans[guy][cnt], dp[cnt][i]); } add(cnt, guy); } } for (int i = 0; i < n; i++) { for (int j = 1; j < n; j++) { cout << ans[i][j] << ' '; } cout << '\n'; } return 0; }