#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7, N = 205, K = 1005;
int dp[N][N][K], a[N];
void upd(int &a, int b) { a = (a + b) % MOD; }
int main(int argc, char const *argv[]) {
  clock_t tStart = clock();
  int n, k;
  scanf("%d %d", &n, &k);
  for (int i = (1), _b = (n); i <= _b; i++) scanf("%d", &a[i]);
  sort(a + 1, a + 1 + n);
  int i;
  dp[0][0][0] = 1;
  for (int id = (1), _b = (n); id <= _b; id++) {
    i = id & 1;
    for (int g = 0, _n = (id); g < _n; g++)
      for (int ib = (0), _b = (k); ib <= _b; ib++) {
        int n_ib = ib + g * (a[id] - a[id - 1]);
        if (n_ib > k) continue;
        if (g > 0) {
          upd(dp[i][g - 1][n_ib], 1LL * g * dp[1 ^ i][g][ib] % MOD);
        }
        upd(dp[i][g + 1][n_ib], dp[1 ^ i][g][ib]);
        upd(dp[i][g][n_ib], 1LL * (g + 1) * dp[1 ^ i][g][ib] % MOD);
      }
    for (int g = 0, _n = (n + 1); g < _n; g++)
      for (int ib = 0, _n = (k + 1); ib < _n; ib++) dp[1 ^ i][g][ib] = 0;
  }
  int res = 0;
  for (int ib = (0), _b = (k); ib <= _b; ib++) upd(res, dp[i][0][ib]);
  printf("%d\n", res);
  fprintf(stderr, "Time taken: %.2fs\n",
          (double)(clock() - tStart) / CLOCKS_PER_SEC);
  return 0;
}
