#include <stdio.h>

const int MAX_N = 50;
const int MOD = 1000000007;

int n,a[MAX_N][MAX_N],r[MAX_N][MAX_N];
long long k;

void mmul(int a[MAX_N][MAX_N], int b[MAX_N][MAX_N])
{
	static int t[MAX_N][MAX_N];
	for (int i=0; i<n; i++)
		for (int j=0; j<n; j++)
		{
			t[i][j]=0;
			for (int k=0; k<n; k++)
				t[i][j]=(t[i][j]+a[i][k]*1LL*b[k][j])%MOD;
		}
	for (int i=0; i<n; i++)
		for (int j=0; j<n; j++)
			a[i][j]=t[i][j];
}

int main()
{
	scanf("%d %lld",&n,&k);
	for (int i=0; i<n; i++)
	{
		r[i][i]=1;
		for (int j=0; j<n; j++)
			scanf("%d",&a[j][i]);
	}
	for (;k;k/=2,mmul(a,a))
		if (k&1)
			mmul(r,a);
	long long ans=0;
	for (int i=0; i<n; i++)
		for (int j=0; j<n; j++)
			ans=(ans+r[i][j])%MOD;
	printf("%lld\n",ans);
	return 0;
}
