#include #include #include #include #define int long long using namespace std; int dp[402][402][402]; int sumdp[402][402][402]; int w[1002]; int mod = 167772161; int dpbezi(int n, int i, int j, int waga) { //cout << n << " " << i << " " << j << " " << waga << "\n"; if (waga < 0) { return 0; } if (j == 0) return 1; int partodp = dpbezi(n, i, j-1, waga - w[i]); int odp = sumdp[n][j][waga] - partodp + mod; odp %= mod; //cout << n << " " << i << " " << j << " " << waga << "\n"; //cout << sumdp[n][j][waga] << " " << partodp << "\n"; //cout << odp << "\n\n"; return odp; } int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, k; cin >> n >> k; for (int i = 1; i <= n; i++) { cin >> w[i]; } dp[0][0][0] = 1; for (int i = 1; i <= n; i++) { dp[i][0][0] = 1; for (int m = 1; m <= n; m++) { for (int waga = 0; waga <= k; waga++) { dp[i][m][waga] = dp[i-1][m][waga]; // if (waga > 0) { // dp[i][m][waga] += dp[i][m][waga-1]; // dp[i][m][waga] %= mod; // } if (m > 0 && waga >= w[i]) { dp[i][m][waga] += dp[i-1][m-1][waga-w[i]]; dp[i][m][waga] %= mod; } } } } for (int m = 0; m <= n; m++) { sumdp[n][m][0] = dp[n][m][0]; for (int waga = 1; waga <= k; waga++) { sumdp[n][m][waga] = dp[n][m][waga] + sumdp[n][m][waga-1]; sumdp[n][m][waga] %= mod; } } /*for (int j = 0; j <= n; j++) { for (int waga = 0; waga <= k; waga++){ cout << dp[n][j][waga] << " "; } cout << "\n"; } cout << "\n"; for (int j = 0; j <= n; j++) { for (int waga = 0; waga <=k; waga++){ cout << sumdp[n][j][waga] << " "; } cout << "\n"; }*/ for (int i = 1; i <= n; i++) { for (int j = 1; j < n; j++) { //cout << dpbezi(n, i, j, k) << " " << dpbezi(n, i, j, k - w[i]) << " "; cout << (dpbezi(n, i, j, k) - dpbezi(n, i, j, k - w[i]) + mod) % mod << " "; } cout << "\n"; } }