1 #include <cstdio>
2 #include <iostream>
3 #include <cstring>
4 #define mo 19260817
5 #define ll long long
6 #define N 15
7 using namespace std;
8 int n,m,l,a[N][N],f[mo],ans,i;
9 ll g[mo];
10 ll calc(int x,int y,int k){ return x*32768000000000ll+y*2000000000ll+k; }
11 int gethash(int x,int y,int k)
12 {
13 ll r=calc(x,y,k);
14 for (i=r%mo;g[i]&&g[i]!=r;++i==mo?i=0:i);
15 return i;
16 }
17 void dfs1(int d,int x,int y,int k)
18 {
19 if (x&&k>=l) return;
20 if (d>=m)
21 {
22 int p=gethash(x,y,k);
23 g[p]=calc(x,y,k),f[p]++; return;
24 }
25 for (int i=1;i<n;i++) if (!(y>>i&1)) dfs1(d+1,i,y|1<<i,k+a[x][i]);
26 }
27 void dfs2(int d,int x,int y,int k)
28 {
29 if (x&&k>=l) return;
30 if (d>=m)
31 {
32 int p=gethash(x,((~y)&((1<<n)-1))|1|1<<x,l-k);
33 ans+=f[p]; return;
34 }
35 for (int i=1;i<n;i++) if (!(y>>i&1)) dfs2(d+1,i,y|1<<i,k+a[x][i]);
36 }
37 int main()
38 {
39 scanf("%d%d",&n,&l);
40 for (int i=0;i<n;i++) for (int j=0;j<n;j++) scanf("%d",&a[i][j]);
41 m=n/2,dfs1(0,0,1,0),m=n-m,dfs2(0,0,1,0),printf("%d",ans);
42 }