#include <bits/stdc++.h>
using namespace std;
char s[105];
long long dp[105][105][105], n, k, f[105], p[105], d, r;
long long pow_(long long x, long long y) {
  long long rt = 1;
  while (y) {
    if (y & 1) rt = rt * x % 1000000007;
    x = x * x % 1000000007;
    y >>= 1;
  }
  return rt;
}
int main() {
  f[0] = 1;
  f[1] = 1;
  for (int i = 2; i < 105; i++) f[i] = (f[i - 1] + f[i - 2]) % (1000000007 - 1);
  for (int i = 0; i < 105; i++) p[i] = pow_(2ll, f[i]);
  scanf("%d%d", &n, &k);
  scanf("%s", s);
  for (int i = 0; i < n; i++)
    if (s[i] == '0')
      dp[0][i][i + 1] = 1;
    else
      dp[1][i][i + 1] = 1;
  for (int i = 0; i <= n; i++) dp[0][i][i] = 1;
  for (int i = 2; i <= k; i++) {
    for (int j = 0; j <= n; j++) dp[i][j][j] = 1;
    for (int d = 1; d <= n; d++) {
      for (int l = 0; l + d <= n; l++) {
        r = l + d;
        for (int k = l + 1; k < r; k++)
          dp[i][l][r] =
              (dp[i][l][r] + dp[i - 1][l][k] * dp[i - 2][k][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)
          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;
      }
    }
  }
  cout << dp[k][0][n] << endl;
}
