#include <bits/stdc++.h>
using namespace std;
long long n, x, dp[105][105][105], f[105], p[105];
string str;
long long pow_mod(long long a, long long i) {
  if (i == 0) return 1;
  long long s = 1;
  while (i > 0) {
    if (i & 1) s = (s * a) % 1000000007;
    a = (a * a) % 1000000007;
    i >>= 1;
  }
  return s;
}
int main() {
  scanf("%I64d%I64d", &n, &x);
  memset(dp, 0, sizeof(dp));
  memset(f, 0, sizeof(f));
  memset(p, 0, sizeof(p));
  cin >> str;
  for (long long i = 0; i < n; i++) {
    dp[0][i][i] = str[i] == '0' ? 1 : 0;
    dp[1][i][i] = str[i] == '1' ? 1 : 0;
  }
  f[0] = f[1] = 1;
  for (long long i = 2; i < 105; i++)
    f[i] = (f[i - 1] + f[i - 2]) % (1000000007 - 1);
  for (long long i = 0; i < 105; i++) p[i] = pow_mod(2, f[i]);
  for (long long i = 2; i <= x; i++) {
    for (long long len = 1; len <= n; len++) {
      for (long long l = 0; l + len - 1 < n; l++) {
        long long r = l + len - 1;
        for (long long k = l; k + 1 <= r; k++)
          dp[i][l][r] = (dp[i][l][r] + dp[i - 1][l][k] * dp[i - 2][k + 1][r]) %
                        1000000007;
        if (l == 0)
          dp[i][l][r] = (dp[i][l][r] + dp[i - 2][l][r] * p[i - 1]) % 1000000007;
        else
          dp[i][l][r] = (dp[i][l][r] + dp[i - 2][l][r]) % 1000000007;
        if (r == n - 1)
          dp[i][l][r] = (dp[i][l][r] + dp[i - 1][l][r] * p[i - 2]) % 1000000007;
        else
          dp[i][l][r] = (dp[i][l][r] + dp[i - 1][l][r]) % 1000000007;
      }
    }
  }
  printf("%I64d\n", dp[x][0][n - 1]);
  return 0;
}
