#include <bits/stdc++.h>
using namespace std;
const int N = 103;
const int mod = 1e9 + 7;
char s[N];
long long g[N], f[N][N][N];
long long qpow(long long a, long long n) {
  long long ret = 1;
  while (n) {
    if (n & 1) ret = ret * a % mod;
    a = a * a % mod;
    n >>= 1;
  }
  return ret;
}
int main() {
  int n, m;
  cin >> n >> m;
  scanf("%s", s + 1);
  g[0] = g[1] = 1;
  for (int i = 2; i <= m; i++) (g[i] = g[i - 1] + g[i - 2]) %= (mod - 1);
  for (int i = 0; i <= m; i++) g[i] = qpow(2, g[i]);
  for (int i = 1; i <= n; i++) {
    if (s[i] == '1')
      f[1][i][i] = 1;
    else
      f[0][i][i] = 1;
  }
  for (int i = 2; i <= m; i++)
    for (int l = 1; l <= n; l++)
      for (int r = l; r <= n; r++) {
        if (l == 1)
          (f[i][l][r] += f[i - 2][l][r] * g[i - 1] % mod) %= mod;
        else
          (f[i][l][r] += f[i - 2][l][r]) %= mod;
        if (r == n)
          (f[i][l][r] += f[i - 1][l][r] * g[i - 2] % mod) %= mod;
        else
          (f[i][l][r] += f[i - 1][l][r]) %= mod;
        for (int j = 1; j < r; j++) {
          (f[i][l][r] += f[i - 1][l][j] * f[i - 2][j + 1][r] % mod) %= mod;
        }
      }
  cout << f[m][1][n] << endl;
  return 0;
}
