#include <bits/stdc++.h>
using namespace std;
const int N = 111;
const int mod = (int)1e9 + 7;
char s[N];
int f[N];
vector<vector<int> > T[N];
int ne[N][N];
int add(int a, int b) {
  int ret = a + b;
  if (ret >= mod) ret -= mod;
  return ret;
}
int mul(int a, int b) { return (long long)a * b % mod; }
vector<vector<int> > mat_mul(const vector<vector<int> >& a,
                             const vector<vector<int> >& b) {
  int n = (int)a.size();
  int m = (int)b[0].size();
  int p = (int)a[0].size();
  assert(p == (int)b.size());
  vector<vector<int> > ret(n, vector<int>(m));
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      for (int k = 0; k < p; k++) {
        ret[i][j] = add(ret[i][j], mul(a[i][k], b[k][j]));
      }
    }
  }
  return ret;
}
int main() {
  int n, x;
  scanf("%d %d", &n, &x);
  scanf("%s", s);
  f[0] = -1;
  for (int i = 0; i < n; i++) {
    s[i] -= '0';
  }
  for (int i = 0, j = -1; i < n; i++, j++) {
    while (j > -1 && s[i] != s[j]) {
      j = f[j];
    }
    f[i + 1] = j + 1;
  }
  for (int i = 0; i < n; i++) {
    for (int k = 0; k < 2; k++) {
      int j = i;
      while (j > -1 && s[j] != k) {
        j = f[j];
      }
      ne[i][k] = j + 1;
    }
  }
  for (int k = 0; k < 2; k++) {
    ne[n][k] = ne[f[n]][k];
  }
  T[0] = vector<vector<int> >(n + 2, vector<int>(n + 2));
  T[1] = vector<vector<int> >(n + 2, vector<int>(n + 2));
  for (int i = 0; i <= n; i++) {
    for (int k = 0; k < 2; k++) {
      T[k][i][i] = add(T[k][i][i], 1);
      int t = ne[i][k];
      T[k][t][i] = add(T[k][t][i], 1);
      if (t == n) {
        T[k][n + 1][i] = add(T[k][n + 1][i], 1);
      }
    }
  }
  for (int k = 0; k < 2; k++) {
    T[k][n + 1][n + 1] = add(T[k][n + 1][n + 1], 2);
  }
  for (int i = 2; i <= x; i++) {
    T[i] = mat_mul(T[i - 2], T[i - 1]);
  }
  vector<vector<int> > v(n + 2, vector<int>(1));
  v[0][0] = 1;
  vector<vector<int> > res = mat_mul(T[x], v);
  printf("%d\n", res[n + 1][0]);
  return 0;
}
