#include <bits/stdc++.h>
const int mod = 1e9 + 7;
const int maxn = 111;
int dp[maxn][maxn][maxn];
int f[maxn];
char s[maxn];
void update(int &a, int b) {
  a += b;
  if (a >= mod) {
    a -= mod;
  }
}
int main() {
  int n, x;
  scanf("%d %d", &n, &x);
  scanf("%s", s);
  f[0] = f[1] = 2;
  for (int i = 0; i < n; ++i) {
    if (s[i] == '1') {
      dp[1][i][i + 1] += 1;
    } else {
      dp[0][i][i + 1] += 1;
    }
  }
  for (int i = 2; i <= x; ++i) {
    f[i] = 1ll * f[i - 1] * f[i - 2] % mod;
    for (int j = 0; j <= n; ++j) {
      for (int k = 0; k <= n; ++k) {
        if (j == 0) {
          update(dp[i][j][k], 1ll * dp[i - 2][j][k] * f[i - 1] % mod);
        } else {
          update(dp[i][j][k], dp[i - 2][j][k]);
        }
        if (k == n) {
          update(dp[i][j][k], 1ll * dp[i - 1][j][k] * f[i - 2] % mod);
        } else {
          update(dp[i][j][k], dp[i - 1][j][k]);
        }
      }
    }
    for (int j = 0; j <= n; ++j) {
      for (int k = j + 1; k <= n; ++k) {
        for (int l = k + 1; l <= n; ++l) {
          update(dp[i][j][l], 1ll * dp[i - 1][j][k] * dp[i - 2][k][l] % mod);
        }
      }
    }
  }
  printf("%d\n", dp[x][0][n]);
  return 0;
}
