#include <bits/stdc++.h>
using namespace std;
using INT = long long;
const int NN = 111;
const int mod = 1e9 + 7;
int dp[NN][NN][NN][4];
int len[NN];
char s[NN];
int n, x;
int add(int &u, int v) {
  u += v;
  if (u >= mod) u -= mod;
}
int main() {
  len[0] = len[1] = 2;
  for (int i = 2; i < NN; i++) {
    len[i] = (INT)len[i - 1] * len[i - 2] % mod;
  }
  cin >> n >> x;
  for (int i = 1; i <= n; i++) {
    scanf("%s", s + 1);
  }
  for (int i = 1; i <= n; i++) {
    int op = s[i] - '0';
    for (int j = 0; j < 4; j++) {
      dp[op][i][i][j] = 1;
    }
  }
  for (int k = 2; k <= x; k++) {
    for (int i = 1; i <= n; i++)
      for (int j = i; j <= n; j++) {
        add(dp[k][i][j][0], dp[k - 1][i][j][0]);
        add(dp[k][i][j][0], dp[k - 2][i][j][0]);
        for (int t = i; t < j; t++) {
          add(dp[k][i][j][0],
              (INT)dp[k - 1][i][t][0] * dp[k - 2][t + 1][j][0] % mod);
        }
        add(dp[k][i][j][1], dp[k - 1][i][j][1]);
        add(dp[k][i][j][1], (INT)len[k - 1] * dp[k - 2][i][j][1] % mod);
        for (int t = i; t < j; t++) {
          add(dp[k][i][j][1],
              (INT)dp[k - 1][i][t][1] * dp[k - 2][t + 1][j][0] % mod);
        }
        add(dp[k][i][j][2], (INT)dp[k - 1][i][j][2] * len[k - 2] % mod);
        add(dp[k][i][j][2], dp[k - 2][i][j][2]);
        for (int t = i; t < j; t++) {
          add(dp[k][i][j][2],
              (INT)dp[k - 1][i][t][0] * dp[k - 2][t + 1][j][2] % mod);
        }
        add(dp[k][i][j][3], (INT)dp[k - 1][i][j][3] * len[k - 2] % mod);
        add(dp[k][i][j][3], (INT)len[k - 1] * dp[k - 2][i][j][3] % mod);
        for (int t = i; t < j; t++) {
          add(dp[k][i][j][3],
              (INT)dp[k - 1][i][t][1] * dp[k - 2][t + 1][j][2] % mod);
        }
      }
  }
  cout << dp[x][1][n][3] << endl;
}
