#include using namespace std; using ll = long long; const ll mod = 1e9 + 7; const int N = 105; const int INF = 0x3f3f3f3f; int n; ll m; ll T[N]; ll A[N][N]; vector> mul(vector> mat1, vector> mat2) { vector> res(n, vector(n, -1)); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { for (int k = 0; k < n; k++) { if (mat1[i][k] != -1 && mat2[k][j] != -1) res[i][j] = max(res[i][j], mat1[i][k] + mat2[k][j]); } } } return res; } vector> powmod(vector> x, ll y) { vector> res(n, vector(n, -1)); for (int i = 0; i < n; i++) res[i][i] = 0; while (y) { if (y & 1) res = mul(res, x); y >>= 1; x = mul(x, x); } return res; } vector cal(vector> mat, vector vec) { vector res(n, -1); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (mat[i][j] != -1 && vec[j] != -1) res[i] = max(res[i], mat[i][j] + vec[j]); } } return res; } int main() { cin >> n >> m; vector vec(n); for (int i = 0; i < n; i++) cin >> vec[i]; vector> A(n, vector(n)); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) cin >> A[i][j]; } if (m == 1) { for (int t = 0; t < n; t++) { ll res = -1; for (int i = 0; i < n; i++) { if (i == t) continue; res = max(res, vec[i] + A[i][t]); } cout << res << " "; } cout << "\n"; return 0; } vector> C(n, vector(n, -1)); for (int t = 0; t < n; t++) { for (int i = 0; i < n; i++) { if (t == i) { C[t][i] = 0; } else { C[t][i] = A[i][t]; } } } vector tmp = cal(powmod(C, m - 1), vec); for (int t = 0; t < n; t++) { ll res = -1; for (int i = 0; i < n; i++) { if (i == t) continue; if (tmp[i] != -1) res = max(res, tmp[i] + A[i][t]); } cout << res << " "; } cout << "\n"; return 0; }