#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
const int maxN = 105;
const int maxL = 105;
int n, len;
char str[maxL];
long long pow2fib[maxN];
long long dp[maxN][maxL][maxL];
long long countPref[maxN][maxL];
long long countSuff[maxN][maxL];
int fibo[maxN];
long long countAll[maxN];
int main() {
  scanf("%d%d\n", &len, &n);
  gets(str + 1);
  pow2fib[1] = pow2fib[0] = 2;
  for (int i = 2; i <= n; i++)
    pow2fib[i] = (1LL * pow2fib[i - 1] * pow2fib[i - 2]) % MOD;
  if (len == 1) countAll[str[1] - '0'] = 1;
  countPref[str[1] - '0'][1] = 1;
  countSuff[str[len] - '0'][len] = 1;
  for (int i = 1; i <= len; i++) dp[str[i] - '0'][i][i] = 1;
  for (int i = 2; i <= n; i++) {
    countAll[i] = countAll[i - 1] * pow2fib[i - 2] % MOD;
    countAll[i] = (countAll[i] + countAll[i - 2] * pow2fib[i - 1]) % MOD;
    for (int j = 1; j < len; j++)
      countAll[i] =
          (countAll[i] + countPref[i - 1][j] * countSuff[i - 2][j + 1]) % MOD;
    for (int j = 1; j <= len; j++) {
      countPref[i][j] =
          (countPref[i - 1][j] + countPref[i - 2][j] * pow2fib[i - 1]) % MOD;
      for (int k = 1; k < j; k++)
        countPref[i][j] =
            (countPref[i][j] + countPref[i - 1][k] * dp[i - 2][k + 1][j]) % MOD;
    }
    for (int j = 1; j <= len; j++) {
      countSuff[i][j] =
          (countSuff[i - 1][j] * pow2fib[i - 2] + countSuff[i - 2][j]) % MOD;
      for (int k = j; k < len; k++)
        countSuff[i][j] =
            (countSuff[i][j] + dp[i - 1][j][k] * countSuff[i - 2][k + 1]) % MOD;
    }
    for (int j = 1; j <= len; j++)
      for (int k = j; k <= len; k++) {
        dp[i][j][k] = (dp[i - 1][j][k] + dp[i - 2][j][k]) % MOD;
        for (int p = j; p < k; p++)
          dp[i][j][k] =
              (dp[i][j][k] + dp[i - 1][j][p] * dp[i - 2][p + 1][k]) % MOD;
      }
  }
  printf("%I64d", countAll[n]);
  return 0;
}
