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

                            #define FOR(i,a,b) for(int i = (a); i < (b); i++)
                            #define rep(i,n) FOR(i,0,n)
                            #define RFOR(i,b,a) for(int i = (b) - 1; i>= (a); i--)
                            #define ITER(it, a) for(typeof(a.begin()) it = a.begin(); it != a.end(); it++)
                            #define FILL(a, value) memset(a, value, sizeof(a)

                            #define SZ(a) (int)a.size()
                            #define ALL(a) a.begin(), a.end()
                            #define PB push_back
                            #define MP make_pair
                            #define er erase
                            #define in insert
                            #define f first
                            #define s second




                            typedef  long long LL;
                            typedef vector<int> VI;
                            typedef vector<LL > VL;
                            typedef vector<vector<int > > VVI;
                            typedef vector<vector<LL>> VVL;
                            typedef vector <vector<pair<int, int >> >VVPI;
                            typedef vector<vector<pair<LL, LL >> >VVPL;
                            typedef vector<pair<LL, LL >> PL;
                            typedef vector<PL> VPL;
                            typedef pair<int, int> PII;
                            typedef vector<PII> VPI;

                            const double PI = acos(-1.0);
                            const int INF = 1e9;
                            const LL LINF = (LL)1e18;

                            const double EPS = 1e-7;
                            const int MAS =  3 *1e5 + 10;
                            const int mod = 998244353;
                            const int MOD =1e9+7;
                            const int LOG= 19;
                            const int ar = 1e5 +100;
                            const int MAX = 1e6 + 1e2;

                         vector<vector<int >> a ;
                         int n;
                         void add(int &sum , int num)
                         {
                             sum+=num;
                             if(sum >=MOD)sum-=MOD;
                         }
                         int mul(int a ,int b)
                         {
                             int res = a *1ll * b %MOD ;
                             return  res;
                         }
                         void mul(vector<vector<int >> &a, vector<vector<int >> b)
                         {
                             vector<vector<int >> vec(n,vector<int >(n)) ;
                             rep(i,n)
                             {
                                 rep(j,n)
                                 {
                                     int sum = 0;
                                     rep(k,n)
                                     {
                                        add(sum,mul(a[i][k],b[k][j]));
                                     }
                                     vec[i][j] = sum ;
                                 }
                             }
                             a = vec;

                         }
                         vector<vector<int >> binpow(LL n)
                         {
                             vector<vector<int>>new_vec;
                             bool ok = false;
                             while(n)
                             {
                               if(n & 1)
                               {
                                   if(!ok)new_vec = a,ok = true ;
                                   else
                                   {
                                       mul(new_vec,a);
                                   }
                               }
                               mul(a,a);
                               n>>=1;

                             }
                             return new_vec;
                         }
                        int main() {
                            ios_base::sync_with_stdio(false);
                            cin.tie(NULL);
                            LL k;
                            cin >> n >> k ;
                            a.resize(n);
                            rep(i,n)a[i].resize(n);
                            rep(i,n)rep(j,n )cin >> a[i][j];
                            vector<vector<int >> vec = binpow(k);
                            int ans = 0;

                            rep(i,n)rep(j,n)add(ans,vec[i][j]);
                            cout << ans;


                        }

















































Measured memory_bytes: 256