#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
const int max_N = 2e3 + 10;
long long dp[max_N][max_N];
int A[max_N];
inline void add(long long &to, const long long &val);
int main() {
  int N, H;
  cin >> N >> H;
  for (int i = 1; i <= N; ++i) {
    cin >> A[i];
  }
  dp[0][0] = 1;
  for (int i = 0; i < N; ++i) {
    for (int j = 0; j < N; ++j) {
      if (A[i + 1] + j == H) {
        add(dp[i + 1][j], dp[i][j]);
        if (j > 0) {
          add(dp[i + 1][j - 1], j * dp[i][j]);
        }
      }
      if (A[i + 1] + j + 1 == H) {
        add(dp[i + 1][j], dp[i][j] * (j + 1));
        add(dp[i + 1][j + 1], dp[i][j]);
      }
    }
  }
  cout << dp[N][0] << endl;
}
inline void add(long long &to, const long long &val) {
  to += val;
  to %= mod;
}
