#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
int N, X;
char s[105];
long long len[105];
long long pt[105];
long long dp[105][105][105];
bool vis[105][105][105];
long long add(long long a, long long b) { return (a + b) % mod; }
long long mul(long long a, long long b) { return a * b % mod; }
long long qpow(long long a, long long n) {
  if (n <= 0) return 1ll;
  long long ret = qpow(a, n / 2);
  ret = mul(ret, ret);
  if (n % 2) ret = mul(ret, a);
  return ret;
}
long long solve(int i, int l, int r) {
  if (i == 0) return (l == r) && s[l] == '0';
  if (i == 1) return (l == r) && s[l] == '1';
  if (vis[i][l][r]) return dp[i][l][r];
  vis[i][l][r] = 1;
  long long ret = 0;
  if (r == N)
    ret = add(ret, mul(solve(i - 1, l, r), pt[i - 2]));
  else
    ret = add(ret, solve(i - 1, l, r));
  if (l == 1)
    ret = add(ret, mul(solve(i - 2, l, r), pt[i - 1]));
  else
    ret = add(ret, solve(i - 2, l, r));
  for (int k = l; k <= r; ++k) {
    ret = add(ret, mul(solve(i - 1, l, k), solve(i - 2, k + 1, r)));
  }
  dp[i][l][r] = ret;
  return dp[i][l][r];
}
int main() {
  scanf("%d %d", &N, &X);
  scanf("%s", s + 1);
  len[0] = len[1] = 1;
  for (int i = 2; i <= 100; ++i)
    len[i] = (len[i - 1] + len[i - 2] + mod - 1) % (mod - 1);
  for (int i = 0; i <= 100; ++i) {
    pt[i] = qpow(2ll, len[i]);
  }
  printf("%lld\n", add(solve(X, 1, N), mod));
}
