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

const int MOD=1e9+7;
int add(int x,int y){return(x+=y)<MOD?x:x-MOD;}
int sub(int x,int y){return(x-=y)>=00?x:x+MOD;}
int mul(int x,int y){return(ll)x*y%MOD;}

ll k;
int n;
int a[50][50];
int b[50][50];

void mul(int a[50][50],int b[50][50]){
  int c[50][50]={};
  for(int i=0;i<50;++i)
  for(int j=0;j<50;++j)
  for(int k=0;k<50;++k)
  c[i][j]=add(c[i][j],mul(a[i][k],b[k][j]));
  memcpy(a,c,sizeof c);
}

int main(){
  scanf("%d%lld",&n,&k);
  for(int i=0;i<n;++i){
    b[i][i]=1;
    for(int j=0;j<n;++j){
      scanf("%d",&a[i][j]);
    }
  }
  while(k){
    if(k&1)mul(b,a);
    mul(a,a);
    k/=2;
  }
  int sol=0;
  for(int i=0;i<n;++i)
    for(int j=0;j<n;++j)
      sol=add(sol,b[i][j]);
  printf("%d\n",sol);
}
