#include<bits/stdc++.h>

using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
#define ST first
#define ND second
#define PB push_back

const int mod = 167772161;

vector<vector<int>> res;

vector<vector<int>> update_dp(vector<vector<int>> dp, int left, int right, vector<int> &weights) {
    for(int k=left; k <= right; k++) {
        int w = weights[k];
        for(int i=dp.size()-1; i >= 1; i--) {
            for(int j=w; j < dp[i].size(); j++) {
                dp[i][j] = (dp[i][j] + dp[i-1][j-w])%mod;
            }
        }
    }
    return dp;
}

void rec(vector<vector<int>> dp, int left, int right, vector<int> &weights, int k) {
    if(left == right) {
        int w = weights[left];
        for(int i=1; i+1 < dp.size(); i++) {
            int sum = 0;
            for(int j=k-w+1; j <= k; j++) {
                sum = (sum+dp[i][j])%mod;
            }
            res[left][i-1] = sum;
        }
        return;
    }
    int mid = (left+right)/2;
    rec(update_dp(dp, mid+1, right, weights), left, mid, weights, k);
    rec(update_dp(dp, left, mid, weights), mid+1, right, weights, k);
}

int main() {
    ios_base::sync_with_stdio(0);
    int n, k;
    cin >> n >> k;
    res.resize(n, vector<int>(n));
    vector<int> w(n);
    for(int i=0; i < n; i++) {
        cin >> w[i];
    }
    vector<vector<int>> dp(n+1, vector<int>(k+1));
    dp[0][0] = 1;
    rec(dp, 0, n-1, w, k);
    for(int i=0; i < n; i++) {
        for(int j=0; j < n-1; j++) {
            cout << res[i][j] << " ";
        }
        cout << "\n";
    }
}