#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
int sum(int a, int b) { return a + b >= MOD ? a + b - MOD : a + b; }
void sumi(int &a, int b) { a = sum(a, b); }
int sub(int a, int b) { return a - b < 0 ? a - b + MOD : a - b; }
int mul(int a, int b) { return (1LL * a * b) % MOD; }
const int MAXN = 2003;
int dp[MAXN][MAXN];
int ar[MAXN];
int main() {
  int n, h;
  cin >> n >> h;
  for (int i = 1; i <= n; i++) cin >> ar[i];
  dp[0][0] = 1;
  for (int i = 0; i < n; i++) {
    for (int o = 0; o <= i; o++) {
      int v = dp[i][o];
      if (ar[i + 1] + o == h) {
        sumi(dp[i + 1][o], v);
        if (o > 0) sumi(dp[i + 1][o - 1], mul(o, v));
      }
      if (ar[i + 1] + o + 1 == h) {
        sumi(dp[i + 1][o], mul(o + 1, v));
        sumi(dp[i + 1][o + 1], v);
      }
    }
  }
  cout << dp[n][0] << endl;
  return 0;
}
