#include <bits/stdc++.h>
using namespace std;
const long MAXN = 2e3 + 10;
const long MASK = (1 << 13) + 10;
const long Mod = 1e9 + 7;
long dp[MAXN][MASK];
long dp2[MAXN][MASK];
char a[MAXN];
int main() {
  long n, k, res = 0;
  cin >> n >> k;
  k = (1 << k);
  for (long i = 1; i <= n; i++) {
    cin >> a[i];
  }
  dp[0][0] = 1;
  for (long i = 1; i < MAXN; i++) {
    for (long j = 0; j < MASK - 10; j++) {
      if (a[i] == '2') {
        dp[i][j + 2] += dp[i - 1][j];
        if ((j + 2) >= k) {
          dp2[i][j + 2] += dp[i - 1][j];
        } else {
          dp2[i][j + 2] += dp2[i - 1][j];
        }
      }
      if (a[i] == '4') {
        if ((j & (-j)) >= 4) {
          dp[i][j + 4] += dp[i - 1][j];
          if ((j + 4) >= k) {
            dp2[i][j + 4] += dp[i - 1][j];
          } else {
            dp2[i][j + 4] += dp2[i - 1][j];
          }
        } else {
          dp[i][4] += dp[i - 1][j];
          if (4 >= k) {
            dp2[i][4] += dp[i - 1][j];
          } else {
            dp2[i][4] += dp2[i - 1][j];
          }
        }
      }
      if (a[i] == '0') {
        dp[i][j + 2] += dp[i - 1][j];
        if ((j + 2) >= k) {
          dp2[i][j + 2] += dp[i - 1][j];
        } else {
          dp2[i][j + 2] += dp2[i - 1][j];
        }
        if ((j & (-j)) >= 4) {
          dp[i][j + 4] += dp[i - 1][j];
          if ((j + 4) >= k) {
            dp2[i][j + 4] += dp[i - 1][j];
          } else {
            dp2[i][j + 4] += dp2[i - 1][j];
          }
        } else {
          dp[i][4] += dp[i - 1][j];
          if (4 >= k) {
            dp2[i][4] += dp[i - 1][j];
          } else {
            dp2[i][4] += dp2[i - 1][j];
          }
        }
      }
      dp[i][j + 2] %= Mod;
      dp[i][j + 4] %= Mod;
      dp[i][4] %= Mod;
      dp2[i][j + 2] %= Mod;
      dp2[i][j + 4] %= Mod;
      dp2[i][4] %= Mod;
    }
  }
  for (long i = 0; i <= MASK; i++) {
    res += dp2[n][i];
    res %= Mod;
  }
  cout << res;
}
