#include <bits/stdc++.h>
using namespace std;
const int mod = 1000000000 + 7;
const double EPS = 1e-8;
const double EPS2 = 1e-4;
int dpT[101][100][100][2];
int n, x;
int add(int a, int b) { return a + b >= mod ? a + b - mod : a + b; }
int mult(int a, int b) { return ((long long)a * b) % mod; }
string second;
int dp(int x, int l, int r, bool flag) {
  if (l > r) {
    if (l == 0 || l == n)
      return dp(x, 0, 0, 1);
    else
      return 1;
  }
  if (x == 1) {
    if (flag)
      return 2;
    else {
      if (l == r && second[l] == '1')
        return 1;
      else
        return 0;
    }
  }
  if (x == 0) {
    if (flag)
      return 2;
    else {
      if (l == r && second[l] == '0')
        return 1;
      else
        return 0;
    }
  }
  if (dpT[x][l][r][flag] != -1) return dpT[x][l][r][flag];
  int ans = 0;
  if (flag) {
    ans = mult(dp(x - 2, 0, 0, 1), dp(x - 1, 0, 0, 1));
  } else {
    for (int m = l - 1; m <= r; m++) {
      ans = add(ans, mult(dp(x - 1, l, m, 0), dp(x - 2, m + 1, r, 0)));
    }
  }
  return dpT[x][l][r][flag] = ans;
}
int main() {
  memset(dpT, -1, sizeof dpT);
  cin >> n >> x;
  cin >> second;
  cout << dp(x, 0, n - 1, 0);
}
