#include using namespace std; typedef long long int ll; typedef double ld; typedef pair ii; typedef vector vi; typedef vector vii; #define PB push_back #define ff first #define ss second #define FOR(prom,a,b) for ( ll prom = (a); prom < (ll)(b); ++prom) #define F(a) FOR(i,0,a) #define FF(a) FOR(j,0,a) //#define M_PI 3.14159265358979323846 #define EPS (1e-10) #define EQ(a,b) (fabs(a-b) <= fabs(a+b)*EPS) #define LINF (1<<62LL) #define DEB cerr<<"DEB: " #define MX 1000 #define MOD 1000000007 ll N, K; string in; ll DP[4][MX+1][MX+1]; int main() { ios::sync_with_stdio(false); cin >> N >> K; memset(DP,0,4*(MX+1)*(MX+1)*sizeof(ll)); string in; cin >> in; if ( in[N-1] == '1' ) { DP[1][N-1][1] = 1; DP[2][N-1][0] = 1; } else { DP[0][N-1][0] = 1; DP[1][N-1][1] = 1; } for ( ll po = N-2; po >= 0; --po) { for ( ll su = 0; su <= K; ++su) { if ( in[po] == '1') { DP[0][po][su] = 0; DP[1][po][su+1] = DP[0][po+1][su] + DP[1][po+1][su]; DP[2][po][su] = DP[0][po+1][su] + DP[1][po+1][su] + DP[2][po+1][su] + DP[3][po+1][su]; DP[3][po][su+1] = DP[2][po+1][su] + DP[3][po+1][su]; } else { DP[0][po][su] = DP[0][po+1][su] + DP[1][po+1][su]; DP[1][po][su+1] = DP[0][po+1][su] + DP[1][po+1][su] + DP[2][po+1][su] + DP[3][po+1][su]; DP[2][po][su] = DP[2][po+1][su] + DP[3][po+1][su]; DP[3][po][su+1] = 0; } } } cout << DP[2][0][K-1] + DP[3][0][K-1] + DP[0][0][K] + DP[1][0][K] << endl; return 0; }