#include <bits/stdc++.h>
using namespace std;

template<class Numeric> class Matrix {
	protected:
		vector< vector<Numeric> > _mat;
		int _col, _row;
		const bool usingModulo = true;
		const Numeric modulo = 1000000007; // using modulo
		void resize(int col, int row) {
			_col = col; _row = row;
			_mat.assign(col, vector<Numeric>(row, 0));
		}
	public:
		Matrix(int col, int row) : _col(col), _row(row) {
			_mat.assign(col, vector<Numeric>(row, 0));
		}
		Matrix(int col, int row, int num) : _col(col), _row(row) {
			_mat.assign(col, vector<Numeric>(row, num));
		}
		int col() const { return _col; }
		int row() const { return _row; }
        vector<vector<Numeric>> mat() const {return _mat; }
		vector<Numeric> &operator[](int i) { return _mat[i]; }
		Numeric &operator() (int i, int j) { return _mat[i][j]; }
		Matrix<Numeric> &operator=(Matrix<Numeric> x) {
            this->_mat = x.mat();
            return *this;
        }
		Matrix<Numeric> operator+(Matrix<Numeric> &x) {
			if (this->col() != x.col() || this->row() != x.row()) {
				cout << "matrices are different sizes .. ";
				this->size(false); cout << "+"; x.size(true);
				exit(0);
			}
			Matrix<Numeric> ret(this->col(), this->row());
			for (int i = 0; i < this->col(); ++i) {
				for (int j = 0; j < this->row(); ++j) {
					ret[i][j] = _mat[i][j] + x[i][j];
					if (usingModulo) ret[i][j] %= modulo;
				}
			}
			return ret;
		}
		Matrix<Numeric> &operator+=(Matrix<Numeric> &x) {
			if (this->col() != x.col() || this->row() != x.row()) {
				cout << "matrices are different sizes .. ";
				this->size(false); cout << "+"; x.size(true);
				exit(0);
			}
			for (int i = 0; i < this->col(); ++i) {
				for (int j = 0; j < this->row(); ++j) {
					_mat[i][j] += x[i][j];
					if (usingModulo) _mat[i][j] %= modulo;
				}
			}
			return *this;
		}
		Matrix<Numeric> operator-(Matrix<Numeric> &x) {
			if (this->col() != x.col() || this->row() != x.row()) {
				cout << "matrices are different sizes .. ";
				this->size(false); cout << "-"; x.size(true);
				exit(0);
			}
			Matrix<Numeric> ret(this->col(), this->row());
			for (int i = 0; i < this->col(); ++i) {
				for (int j = 0; j < this->row(); ++j) {
					ret[i][j] = _mat[i][j] - x[i][j];
					if (usingModulo) ret[i][j] %= modulo;
				}
			}
			return ret;
		}
		Matrix<Numeric> &operator-=(Matrix<Numeric> &x) {
			if (this->col() != x.col() || this->row() != x.row()) {
				cout << "matrices are different sizes .. ";
				this->size(false); cout << "-"; x.size(true);
				exit(0);
			}
			for (int i = 0; i < this->col(); ++i) {
				for (int j = 0; j < this->row(); ++j) {
					_mat[i][j] -= x[i][j];
					if (usingModulo) _mat[i][j] %= modulo;
				}
			}
			return *this;
		}
		Matrix<Numeric> operator*(Matrix<Numeric> &x) {
			if (this->row() != x.col()) {
				cout << "cannot multiply matrices .. ";
				this->size(false); cout << "*"; x.size(true);
				exit(0);
			}
			Matrix<Numeric> ret(this->col(), x.row());
			for (int i = 0; i < this->col(); ++i) {
				for (int j = 0; j < x.row(); ++j) {
					for (int k = 0; k < this->row(); ++k) {
						ret[i][j] += _mat[i][k] * x[k][j];
						if (usingModulo) ret[i][j] %= modulo;
					}
				}
			}
			return ret;
		}
		Matrix<Numeric> &operator*(Numeric k) {
			Matrix<Numeric> ret(this->col(), this->row());
			for (int i = 0; i < this->col(); ++i) {
				for (int j = 0; j < this->row(); ++j) {
					ret(i, j) = _mat[i][j] * k;
					if (usingModulo) ret(i, j) %= modulo;
				}
			}
			return ret;
		}
		Matrix<Numeric> &operator*=(Matrix<Numeric> &x) {
			if (this->row() != x.col()) {
				cout << "cannot multiply matrices .. ";
				this->size(false); cout << "*"; x.size(true);
				exit(0);
			}
			Matrix<Numeric> ret(this->col(), x.row());
			for (int i = 0; i < this->col(); ++i) {
				for (int j = 0; j < x.row(); ++j) {
					for (int k = 0; k < this->row(); ++k) {
						ret[i][j] += _mat[i][k] * x[k][j];
						if (usingModulo) ret[i][j] %= modulo;
					}
				}
			}
			this->resize(this->col(), x.row());
			for (int i = 0; i < this->col(); ++i) {
				for (int j = 0; j < x.row(); ++j) {
					_mat[i][j] = ret[i][j];
				}
			}
			return *this;
		}
		Matrix<Numeric> &operator*=(Numeric k) {
			Matrix<Numeric> ret(this->col(), this->row());
			for (int i = 0; i < this->col(); ++i) {
				for (int j = 0; j < this->row(); ++j) {
					_mat[i][j] *= k;
					if (usingModulo) _mat %= modulo;
				}
			}
			return *this;
		}
        Numeric sum() {
            Numeric ret = 0;
            for (int i = 0; i < this->col(); ++i) {
                for (int j = 0; j < this->row(); ++j) {
                    ret += _mat[i][j];
                    if (usingModulo) ret %= modulo;
                }
            }
            return ret;
        }
		void print() {
			cout << "-- print "; this->size(false); cout << " --" << endl;
			for (int i = 0; i < _col; ++i) {
				for (int j = 0; j < _row; ++j) {
					if (j != 0) cout << "\t";
					cout << _mat[i][j];
				}
				cout << endl;
			}
			cout << "------------------" << endl;
		}
		void print(string str) {
			cout << "-- print \"" << str << "\" "; this->size(false); cout << " --" << endl;
			for (int i = 0; i < _col; ++i) {
				for (int j = 0; j < _row; ++j) {
					if (j != 0) cout << "\t";
					cout << _mat[i][j];
				}
				cout << endl;
			}
			cout << "------------------" << endl;
		}
		void size (bool endline = true) const {
			cout << "(" << this->col() << ", " << this->row() << ")";
			if (endline) cout << endl;
		}
};

template<class Numeric> class SquareMatrix : public Matrix<Numeric> {
	private:
	public:
		SquareMatrix(int col): Matrix<Numeric>(col, col){
		}
		SquareMatrix(int col, int num): Matrix<Numeric>(col, col, num) {
		}
		SquareMatrix(int col, bool identity): Matrix<Numeric>(col, col) {
			if (identity) {
				for (int i = 0; i < col; ++i) {
					this->_mat[i][i] = 1;
				}
			}
		}
};


int main(){
	int n; long long k; cin >> n >> k;
	Matrix<long long> ans(n, 1, 1), a(n, n), t(1, n, 1);
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cin >> a[i][j];
        }
    }
    while (k) {
        if (k & 1) {
            ans = a * ans; 
        }
        a *= a;
        k /= 2;
    }
    cout << ans.sum() << endl; 
	return 0;
}


Measured memory_bytes: 256