#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
#define x first
#define y second
#define bg begin()
#define ed end()
#define pb push_back
#define mp make_pair
#define sz(a) int((a).size())
#define R(i,n) for(int i(0);i<(n);++i)
#define L(i,n) for(int i((n)-1);i>=0;--i)
const int iinf=0x3f3f3f3f;
const ll linf=0x3f3f3f3f3f3f3f3f;
//Data
const int N=101;
int n,m,F[3][N][N][4],f[3];
string str;
//Math
const int mod=1e9+7;
void fmod(int &x){x+=x>>31&mod;}
//Main
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>m>>str,f[0]=f[1]=2;
R(i,n)R(t,4) F[str[i]-'0'][i][i][t]=1;
R(i,m+1)if(i>1){
int me=i%3,a=(i-1)%3,b=(i-2)%3;
f[me]=1ll*f[a]*f[b]%mod;
R(r,n)R(l,r+1){
fmod(F[me][l][r][0]=F[a][l][r][0]+F[b][l][r][0]-mod);
fmod(F[me][l][r][1]=F[a][l][r][1]+1ll*f[a]*F[b][l][r][1]%mod-mod);
fmod(F[me][l][r][2]=1ll*F[a][l][r][2]*f[b]%mod+F[b][l][r][2]-mod);
fmod(F[me][l][r][3]=1ll*F[a][l][r][3]*f[b]%mod+
1ll*F[b][l][r][3]*f[a]%mod-mod);
}
R(len,n)if(len)R(l,n-len)
for(int r=l+len,mid=l;mid<r;mid++){
fmod(F[me][l][r][0]+=1ll*F[a][l][mid][0]*F[b][mid+1][r][0]%mod-mod);
fmod(F[me][l][r][1]+=1ll*F[a][l][mid][1]*F[b][mid+1][r][0]%mod-mod);
fmod(F[me][l][r][2]+=1ll*F[a][l][mid][0]*F[b][mid+1][r][2]%mod-mod);
fmod(F[me][l][r][3]+=1ll*F[a][l][mid][1]*F[b][mid+1][r][2]%mod-mod);
}
}
cout<<F[m%3][0][n-1][3]<<'\n';
return 0;
}
/*
key:11
0 0
1 0
10 0
101 1
10110 14
*/