#include <bits/stdc++.h>
using namespace std;
int in() {
  int x, y;
  y = scanf("%d", &x);
  return x;
}
const long long MOD = 1e9 + 7;
const int maxn = 105;
long long C[maxn][maxn][maxn], L[maxn][maxn][maxn], R[maxn][maxn][maxn],
    A[maxn][maxn][maxn];
bool mem[4][maxn][maxn][maxn];
bool saved[maxn];
long long P[maxn];
string s;
int b[maxn];
long long add(long long x, long long y) { return (x + y) % MOD; }
long long mul(long long x, long long y) { return x * y % MOD; }
long long pw(int k) {
  if (saved[k]) return P[k];
  long long &R = P[k];
  saved[k] = true;
  if (k <= 1) return R = 2;
  return R = mul(pw(k - 1), pw(k - 2));
}
long long occur(int k, int l, int r) {
  if (mem[1][k][l][r]) return C[k][l][r];
  long long &R = C[k][l][r];
  mem[1][k][l][r] = true;
  if (k <= 1)
    R = (r - l == 1 && b[l] == k);
  else {
    R = add(occur(k - 1, l, r), occur(k - 2, l, r));
    for (int i = l + 1; i < r; i++)
      R = add(R, mul(occur(k - 1, l, i), occur(k - 2, i, r)));
  }
  return R;
}
long long lpow(int k, int l, int r) {
  if (mem[2][k][l][r]) return L[k][l][r];
  long long &R = L[k][l][r];
  mem[2][k][l][r] = true;
  if (k <= 1) return R = (r - l == 1 && b[l] == k);
  R = add(lpow(k - 1, l, r), mul(lpow(k - 2, l, r), pw(k - 1)));
  for (int i = l + 1; i < r; i++)
    R = add(R, mul(lpow(k - 1, l, i), occur(k - 2, i, r)));
  return R;
}
long long rpow(int k, int l, int r) {
  if (mem[3][k][l][r]) return R[k][l][r];
  long long &Res = R[k][l][r];
  mem[3][k][l][r] = true;
  if (k <= 1) return Res = (r - l == 1 && b[l] == k);
  Res = add(rpow(k - 2, l, r), mul(rpow(k - 1, l, r), pw(k - 2)));
  for (int i = l + 1; i < r; i++)
    Res = add(Res, mul(rpow(k - 2, i, r), occur(k - 1, l, i)));
  return Res;
}
long long answer(int k, int l, int r) {
  if (mem[0][k][l][r]) return A[k][l][r];
  long long &R = A[k][l][r];
  mem[0][k][l][r] = true;
  if (k <= 1) return R = (r - l == 1 && b[l] == k);
  R = add(mul(answer(k - 1, l, r), pw(k - 2)),
          mul(answer(k - 2, l, r), pw(k - 1)));
  for (int i = l + 1; i < r; i++)
    R = add(R, mul(lpow(k - 1, l, i), rpow(k - 2, i, r)));
  return R;
}
int main() {
  int n = in(), k = in();
  cin >> s;
  for (int i = 0; i < n; i++) b[i] = (s[i] == '1');
  cout << answer(k, 0, n) << endl;
  return 0;
}
