#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
int n, k, f[2][(1 << 10) + 4][2], a[2010], _k, ans;
int plu(int u, int v) { return (u + v) % MOD; }
int main() {
  scanf("%d%d", &n, &k);
  --k;
  f[0][0][0] = 1;
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
  }
  _k = (1 << k);
  int rep;
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j < _k; j++) {
      f[i & 1][j][0] = f[i & 1][j][1] = 0;
    }
    for (int j = 0; j < _k; j++) {
      if (a[i] != 4) {
        rep = j + 1;
        if (rep != _k) {
          f[i & 1][rep][0] = plu(f[i & 1][rep][0], f[1 - (i & 1)][j][0]);
          f[i & 1][rep][1] = plu(f[i & 1][rep][1], f[1 - (i & 1)][j][1]);
        } else {
          f[i & 1][0][1] = plu(f[i & 1][0][1], f[1 - (i & 1)][j][0]);
          f[i & 1][0][1] = plu(f[i & 1][0][1], f[1 - (i & 1)][j][1]);
        }
      }
      if (a[i] != 2) {
        rep = j + 2;
        if (rep & 1) {
          f[i & 1][2][0] = plu(f[i & 1][2][0], f[1 - (i & 1)][j][0]);
          f[i & 1][2][1] = plu(f[i & 1][2][1], f[1 - (i & 1)][j][1]);
        } else {
          if (rep != _k) {
            f[i & 1][rep][0] = plu(f[i & 1][rep][0], f[1 - (i & 1)][j][0]);
            f[i & 1][rep][1] = plu(f[i & 1][rep][1], f[1 - (i & 1)][j][1]);
          } else {
            f[i & 1][0][1] = plu(f[i & 1][0][1], f[1 - (i & 1)][j][0]);
            f[i & 1][0][1] = plu(f[i & 1][0][1], f[1 - (i & 1)][j][1]);
          }
        }
      }
    }
  }
  for (int i = 0; i < _k; i++) {
    ans = plu(ans, f[n & 1][i][1]);
  }
  printf("%d\n", ans);
  return 0;
}
