#include <bits/stdc++.h>
using namespace std;
struct grid{
	long long a[50][50];
};
const int mod=1e9+7;
int n;
long long k;
inline grid mul(grid x,grid y){
	grid ans;
	memset(ans.a,0,sizeof(ans.a));
	for(int i=0;i<n;++i){
		for(int k=0;k<n;++k){
			for(int j=0;j<n;++j){
				ans.a[i][j]=(ans.a[i][j]+x.a[i][k]*y.a[k][j]+mod)%mod;
			}
		}
	}
	return ans;
}
inline int solve(long long d,grid ini){
	grid res;
	for(int i=0;i<n;++i){
		res.a[i][i]=1;
	}
	while(d){
		if((d&1)){
			res=mul(res,ini);
		}
		d>>=1;
		ini=mul(ini,ini);
	}
	long long ans=0;
	for(int i=0;i<n;++i){
		for(int j=0;j<n;++j){
			ans+=res.a[i][j];
			if(ans>=mod){
				ans-=mod;
			}
		}
	}
	return ans;
}
int main(){
	cin>>n>>k;
	grid ini;
	for(int i=0;i<n;++i){
		for(int j=0;j<n;++j){
			cin>>ini.a[i][j];
		}
	}
	cout<<solve(k,ini)<<'\n';
	return 0;
}