#include <bits/stdc++.h>
using namespace std;
const long long N = 105;
const long long mod = 1e9 + 7;
long long n, x;
long long pw[N], dp[N][N][N];
string s;
void add(long long &x, long long y) { x = (x + y) % mod; }
long long solve(long long l, long long r, long long pos) {
  if (l > r) return 1ll;
  if (pos < 0) return 0;
  if (pos == 0) return (l == r && s[l] == '0');
  if (pos == 1) return (l == r && s[l] == '1');
  long long &sum = dp[l][r][pos];
  if (sum != -1) return sum;
  sum = 0;
  add(sum, solve(l, r, pos - 2) * ((l == 0) ? pw[pos - 1] : 1));
  add(sum, solve(l, r, pos - 1) * ((r == n - 1) ? pw[pos - 2] : 1));
  for (long long mid = l; mid < r; ++mid) {
    long long cur = 1ll * solve(l, mid, pos - 1) * solve(mid + 1, r, pos - 2);
    sum = (sum + cur) % mod;
  }
  return sum;
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> x >> s;
  memset(dp, -1, sizeof dp);
  pw[0] = pw[1] = 2;
  for (long long i = 2; i <= x + 1; ++i)
    pw[i] = 1ll * pw[i - 1] * pw[i - 2] % mod;
  cout << solve(0, n - 1, x);
  return 0;
}
