#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int CISLO = 1042;
const int CISLO1 = 204;
int dp[CISLO1][CISLO1][CISLO];
int pole[CISLO];
bool cmp(int i, int j) { return i < j; }
int main() {
  int n, k;
  cin >> n >> k;
  for (int i = 1; i <= n; i++) {
    cin >> pole[i];
  }
  sort(pole + 1, pole + 1 + n, cmp);
  dp[0][0][0] = 1;
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j <= i; j++) {
      for (int doterazk = 0; doterazk <= k; doterazk++) {
        int x = doterazk + j * (pole[i] - pole[i - 1]) % mod;
        if (x > k) {
        } else {
          int cis = dp[i - 1][j][doterazk];
          dp[i][j][x] = (dp[i][j][x] + (long long)(j + 1) * cis % mod) % mod;
          dp[i][j + 1][x] = (dp[i][j + 1][x] + cis) % mod;
          dp[i][j - 1][x] = (dp[i][j - 1][x] + (long long)j * cis % mod) % mod;
        }
      }
    }
  }
  int vys = 0;
  for (int i = 0; i <= k; i++) {
    vys = ((vys + dp[n][0][i]) % mod);
  }
  cout << vys << endl;
  return 0;
}
