#include <bits/stdc++.h>
using namespace std;
const int maxn = 210;
const int maxm = 1010;
int a[maxn];
int f[maxn][maxn][maxm];
const int MOD = 1e9 + 7;
int n, m;
void dp() {
  for (int i = 0; i < n; i++) {
    for (int j = 0; j <= n; j++) {
      int t = (a[i + 1] - a[i]) * j;
      for (int k = 0; k <= m - t; k++) {
        (f[i + 1][j][k + t] += (long long)f[i][j][k] * (j + 1) % MOD) %= MOD;
        if (j != n) (f[i + 1][j + 1][k + t] += f[i][j][k]) %= MOD;
        if (j != 0)
          (f[i + 1][j - 1][k + t] += (long long)f[i][j][k] * j % MOD) %= MOD;
      }
    }
  }
}
int main(int argc, char const *argv[]) {
  cin >> n >> m;
  for (int i = 1; i <= n; i++) cin >> a[i];
  sort(a + 1, a + 1 + n);
  f[0][0][0] = 1;
  dp();
  long long ans = 0;
  for (int i = 0; i <= m; i++) {
    ans += f[n][0][i];
    ans %= MOD;
  }
  cout << (ans) % MOD;
  return 0;
}
