#include <bits/stdc++.h>
using namespace std;
int mod = 1e9 + 7;
int f[105][105][105], len[105], n, m;
char s[105];
int qpow(int x, int y) {
  int res = 1;
  while (y) {
    if (y % 2) res = 1ll * res * x % mod;
    x = 1ll * x * x % mod;
    y /= 2;
  }
  return res;
}
int dfs(int x, int l, int r) {
  if (f[x][l][r] != -1) return f[x][l][r];
  if (x <= 1) return (l == r) && (s[l] == (x + '0'));
  int cnt = 0;
  cnt = (cnt +
         1ll * dfs(x - 1, l, r) * ((r == n) ? qpow(2, len[x - 2]) : 1) % mod) %
        mod;
  cnt = (cnt +
         1ll * dfs(x - 2, l, r) * ((l == 1) ? qpow(2, len[x - 1]) : 1) % mod) %
        mod;
  for (int k = l; k < r; k++)
    cnt = (cnt + 1ll * dfs(x - 1, l, k) * dfs(x - 2, k + 1, r) % mod) % mod;
  return f[x][l][r] = cnt;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n >> m;
  memset(f, -1, sizeof(f));
  len[1] = 1;
  len[0] = 1;
  for (int i = 2; i <= m; i++) len[i] = (len[i - 1] + len[i - 2]) % (mod - 1);
  cin >> s + 1;
  printf("%d\n", dfs(m, 1, n));
}
