#include <bits/stdc++.h>
using namespace std;
long long dp[107][107][107], f[107], pd[107], n, k;
string s;
const long long mod = 1e9 + 7;
long long pw(long long a, long long b) {
  if (b == 0) return 1LL;
  if (b == 1) return a;
  long long ret = pw(a, b / 2);
  if (b % 2 == 0) return ret * ret % mod;
  return ret * ret % mod * a % mod;
}
void add(long long &a, long long b) { a = (a + b) % mod; }
int main() {
  ios_base::sync_with_stdio(0);
  cin >> n >> k;
  cin >> s;
  f[0] = 1;
  f[1] = 1;
  for (int i = 2; i <= k; i++) f[i] = (f[i - 1] + f[i - 2]) % (mod - 1);
  for (int i = 0; i <= k; i++) pd[i] = pw(2LL, f[i]);
  for (int i = 1; i <= n; i++) {
    dp[s[i - 1] - '0'][i][i] = 1;
  }
  for (int i = 2; i <= k; i++) {
    for (int l = 1; l <= n; l++) {
      for (int r = l; r <= n; r++) {
        for (int m = l - 1; m <= r; m++) {
          if (m == r)
            add(dp[i][l][r],
                dp[i - 1][l][r] * (r == n ? pd[i - 2] : 1LL) % mod);
          else if (m == l - 1)
            add(dp[i][l][r],
                dp[i - 2][l][r] * (l == 1 ? pd[i - 1] : 1LL) % mod);
          else
            add(dp[i][l][r], dp[i - 1][l][m] * dp[i - 2][m + 1][r] % mod);
        }
      }
    }
  }
  cout << dp[k][1][n];
}
