#include<bits/stdc++.h>
using namespace std;
long long n,k;
typedef struct node
{
	long long a[51][51];
	struct node operator *(const struct node & tmp)
	{
		int i,j,K;
		struct node ret;
		memset(ret.a,0,sizeof(ret.a));
		for(K=1;K<=n;K++)
		{
			for(i=1;i<=n;i++)
			{
				for(j=1;j<=n;j++)
				{
					if(a[i][K]&&tmp.a[K][j])
						ret.a[i][j]=((long long)a[i][K]*tmp.a[K][j]+ret.a[i][j])%1000000007;
				}			
			}
		}
		return ret; 
	}
}NODE,*PNODE;
NODE ans,g;
int main()
{
	int flag=0,i,j;
	long long a;
	scanf("%lld %lld",&n,&k);
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=n;j++)
		{
			scanf("%lld",&g.a[i][j]);
		}
	}
	while(k)
	{
		if(k%2)
		{
			if(!flag)
			{
				ans=g;
				flag=1;
			}
			else
				ans=ans*g;
		}
		g=g*g;
		k/=2;
	}
	a=0;
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=n;j++)
		{
			a=((long long)a+ans.a[i][j])%1000000007;
		}	
	}
	printf("%lld",a);
	return 0;
}