#include using namespace std; using ll=long long; using ld=long double; #define FOR(i, aa,bb) for(ll i=aa;i<(ll)bb; 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 MOD (1000000007) ll dp[1007][1007][2]; vector a; ll r(ll i, ll k, bool t) { //cout << i << " " << k << " " << t << endl; if (i == 0 && a[0] == k && t) { return dp[i][k][t] = 1; } if (k < 0) return 0; if (dp[i][k][t] != -1) return dp[i][k][t]; else if (i == 0 && a[0] == 1 && k == 0 && !t) return dp[i][k][t] = 1; else if (i == 0) return dp[i][k][t] = 0; ll res; if (t) { if (a[i] == 0) { res = r(i - 1, k, true); } else { // 1 res = r(i-1, k-1, true); } } else { if (a[i] == 0) { res = r(i - 1, k, false) + r(i - 1, k - 1, false); } else { // 1 res = r(i - 1, k - 1, false) + r(i - 1, k, false) + r(i - 1, k, true); } } res %= MOD; return dp[i][k][t] = res; } ll f(vector aa, ll n, ll k, bool eq) { a = aa; /*for (int l = 0; l < a.size(); ++ l) { cout << a[l]; } cout << endl;*/ F(1007)FF(1007) dp[i][j][0] = -1; F(1007)FF(1007) dp[i][j][1] = -1; ll res = r(n-1, k, false); /*cout << "----" << endl; cout << k << endl; FOR(l,0,2) { for (ll x = 0; x <= k; ++ x) { FF(n) { r(j, x, l); cout << dp[j][x][l] << ' '; } cout << endl; } cout << endl << endl; }*/ return res; } int main() { ll n, k; cin >> n >> k; vector in = vector(n); F(n) { char t; cin >> t; in[i] = t - '0'; } vector ub(n+1); FOR(i,1,n+1) ub[i] = in[i-1]; /*for (ll i = 1; i >= 0; i --) { if (ub[i] == 0) { ub[i] = 1; break; } else ub[i] = 0; }*/ ub[0] = 1; //cout << "ub" << endl; /*for (int l = 0; l < ub.size(); ++ l) { cout << ub[l]; } cout << endl; for (int l = 0; l < a.size(); ++ l) { cout << a[l]; } cout << endl;*/ ll res = f(ub, n+1, k, false) - f(in, n, k, false); cout << res%MOD << endl; return 0; }