#include <bits/stdc++.h>
using namespace std;
int N, X;
string S;
int nex[102][2];
int add[102][2];
signed long long pat[101][101][101];
signed long long padd[101][101][101];
signed long long mo = 1000000007;
void solve() {
  int i, j, k, l, r, x, y, z;
  string s;
  cin >> N >> X >> S;
  for (i = 0; i < (N); i++) {
    for (j = 0; j < (2); j++) {
      if (S[i] == '0' + j) {
        nex[i][j] = i + 1;
        if (i + 1 != N) continue;
        add[i][j] = 1;
      }
      string T = S.substr(0, i) + (char)('0' + j);
      for (x = i; x >= 0; x--) {
        if (T.substr(T.size() - x) == S.substr(0, x)) {
          nex[i][j] = x;
          break;
        }
      }
    }
  }
  for (i = 0; i < (N); i++) {
    pat[0][i][i]++;
    pat[0][i][nex[i][0]]++;
    padd[0][i][nex[i][0]] += add[i][0];
    pat[1][i][i]++;
    pat[1][i][nex[i][1]]++;
    padd[1][i][nex[i][1]] += add[i][1];
  }
  for (i = 2; i <= X; i++) {
    for (x = 0; x < (N); x++)
      for (y = 0; y < (N); y++)
        for (z = 0; z < (N); z++) {
          (pat[i][x][z] += pat[i - 1][x][y] * pat[i - 2][y][z]) %= mo;
          (padd[i][x][z] += pat[i - 1][x][y] * padd[i - 2][y][z] +
                            padd[i - 1][x][y] * pat[i - 2][y][z]) %= mo;
        }
  }
  signed long long ret = 0;
  for (j = 0; j < (N); j++) ret += padd[X][0][j];
  cout << ret % mo << endl;
}
int main(int argc, char** argv) {
  string s;
  int i;
  if (argc == 1) ios::sync_with_stdio(false), cin.tie(0);
  for (i = 0; i < (argc - 1); i++) s += argv[i + 1], s += '\n';
  for (i = 0; i < (s.size()); i++) ungetc(s[s.size() - 1 - i], stdin);
  cout.tie(0);
  solve();
  return 0;
}
