//vsp #include #define cat(x) cerr << #x << " = " << x << "\n"; #define rep(i, a, b) for (int i = (a); i < (b); i++) #define per(i, a, b) for (int i = (b) - 1; (a) <= i; i--) #define FOR(i, n) for (int i = 0; i < (n); i++) #define sz(x) int(x.size()) #define pb push_back using ll = long long; using namespace std; template T power(T x, long long e) { T res = 1; for (; e > 0; e /= 2) { if (e & 1) res = res * x; x = x * x; } return res; } template struct mod { int x; mod(int v = 0) : x(v < 0 ? v + P : v) {} mod operator-() { return P - x; } mod inv() { assert(x != 0); return power(*this, P - 2); } void operator+= (mod o) {*this = *this + o;} void operator-= (mod o) {*this = *this - o;} void operator*= (mod o) {*this = *this * o;} void operator/= (mod o) {*this = *this * o.inv();} mod operator* (mod o) {return int(1ll * x * o.x % P);} mod operator/ (mod o) {return *this * o.inv();} mod operator+ (mod o) {return x + o.x < P ? x + o.x : x + o.x - P;} mod operator- (mod o) {return 0 <= x - o.x ? x - o.x : x - o.x + P;} friend ostream& operator<< (ostream &os, const mod &n) { return os << n.x; } friend istream& operator>> (istream &is, mod &n) { return is >> n.x; } }; using Z = mod<167772161>; const int H = 20; const int N = 1 << 10; int n, k, w[N]; Z dp[H][N][N]; vector items[2 * N]; void add(int x, int y, int item, int u, int l, int r) { if (y < l || r < x) return; if (x <= l && r <= y) { items[u].push_back(item); return; } int m = (l + r) / 2; add(x, y, item, 2 * u, l, m); add(x, y, item, 2 * u + 1, m + 1, r); } void add(int x, int y, int item) { if (x <= y) add(x, y, item, 1, 0, n - 1); } void solve(int u, int l, int r, int dep) { memcpy(dp[dep], dp[dep - 1], sizeof dp[dep]); for (auto item : items[u]) { per(cnt, 0, n) rep(w, 0, k - item + 1) dp[dep][cnt + 1][w + item] += dp[dep][cnt][w]; } if (l == r) { rep(i, 1, n) { Z sum = 0; rep(j, k - w[l] + 1, k + 1) sum += dp[dep][i][j]; cout << sum << ' '; } cout << '\n'; return; } int m = (l + r) / 2; solve(2 * u, l, m, dep + 1); solve(2 * u + 1, m + 1, r, dep + 1); } int main() { cin.tie(0)->sync_with_stdio(0); cin >> n >> k; FOR(i, n) { cin >> w[i]; add(0, i - 1, w[i]); add(i + 1, n - 1, w[i]); } dp[0][0][0] = 1; solve(1, 0, n - 1, 1); return 0; }