#include using namespace std; using ll=long long; using ld=double; using pll=pair; using vll=vector; using vpll=vector; using vvll=vector; #define FOR(i,a,b) for(ll i=a;i<(ll)b;++i) #define ROF(i,a,b) for(ll i=a;i>=(ll)b;--i) #define F(n) FOR(i,0,n) #define FF(n) FOR(j,0,n) #define aa first #define bb second #define PB push_back #define MX 1007 ll DP[MX][MX][2]; #define MOD 1000000007 ll n,k; string s; ll dp(ll pos, ll k, ll c){ ll &ret = DP[pos][k][c]; if(pos==n) { return ret=k==c; } ret = 0; if(k-(c+s[pos])%2 >=0) ret = (ret+(dp(pos+1, k-(c+s[pos])%2, (c+s[pos])/2)))%MOD; if(k-(c+s[pos]+1)%2 >=0) ret = (ret+(dp(pos+1, k-(1+c+s[pos])%2, (1+c+s[pos])/2)))%MOD; return ret; } int main(){ ios::sync_with_stdio(0); memset(DP,-1,sizeof DP); cin >> n >> k; cin>>s; reverse(s.begin(),s.end()); for(auto &c:s) c-='0'; cout << dp(0,k,0) << endl; return 0; }