#include <bits/stdc++.h>
using std ::max;
using std ::min;
const int maxm = 300;
const int mod = 1e9 + 7;
int f[maxm][maxm][maxm], g[maxm];
int n, x;
char str[maxm];
int fpm(int x, int k) {
  int res = 1;
  while (k) {
    if (k & 1) res = 1LL * res * x % mod;
    x = 1LL * x * x % mod;
    k >>= 1;
  }
  return res;
}
int add(int x, int y) { return x + y >= mod ? x + y - mod : x + y; }
int main() {
  scanf("%d%d", &n, &x);
  scanf("%s", str + 1);
  g[0] = 1, g[1] = 1;
  for (int i = 2; i <= x; i++) g[i] = (g[i - 1] + g[i - 2]) % (mod - 1);
  for (int i = 0; i <= x; i++) g[i] = fpm(2, g[i]);
  for (int i = 1; i <= n; i++) {
    if (str[i] == '0')
      f[0][i][i] = 1;
    else
      f[1][i][i] = 1;
  }
  for (int i = 2; i <= x; i++) {
    for (int l = 1; l <= n; l++) {
      for (int r = n; r >= l; r--) {
        if (r == n)
          f[i][l][r] = add(f[i][l][r], 1LL * f[i - 1][l][r] * g[i - 2] % mod);
        else
          f[i][l][r] = add(f[i][l][r], f[i - 1][l][r]);
        if (l == 1)
          f[i][l][r] = add(f[i][l][r], 1LL * f[i - 2][l][r] * g[i - 1] % mod);
        else
          f[i][l][r] = add(f[i][l][r], f[i - 2][l][r]);
        for (int k = l; k < r; k++) {
          f[i][l][r] =
              add(f[i][l][r], 1LL * f[i - 1][l][k] * f[i - 2][k + 1][r] % mod);
        }
      }
    }
  }
  printf("%d\n", f[x][1][n]);
  return 0;
}
