#include <bits/stdc++.h>
using namespace std;
const long long int INF = (long long int)1e9 + 10;
const long long int INFLL = (long long int)1e18 + 10;
const long double EPS = 1e-8;
const long double EPSLD = 1e-18;
const long long int MOD = 1e9 + 7;
template <class T>
T &chmin(T &a, const T &b) {
  return a = min(a, b);
}
template <class T>
T &chmax(T &a, const T &b) {
  return a = max(a, b);
}
struct Mod {
  unsigned n;
  Mod() {}
  Mod(long long int x) {
    if (x < 0)
      n = x % MOD + MOD;
    else
      n = x % MOD;
  }
};
Mod operator+(Mod a, Mod b) { return Mod(a.n + b.n); }
Mod operator+=(Mod &a, Mod b) { return a = a + b; }
Mod operator-(Mod a, Mod b) { return Mod(a.n + MOD - b.n); }
Mod operator-=(Mod &a, Mod b) { return a = a - b; }
Mod operator*(Mod a, Mod b) { return Mod((long long int)a.n * b.n); }
Mod operator*=(Mod &a, Mod b) { return a = a * b; }
Mod modpow(Mod x, long long int k) {
  Mod res = 1;
  while (k) {
    if (k & 1) res *= x;
    k /= 2;
    x *= x;
  }
  return res;
}
Mod inv(Mod a) { return modpow(a, MOD - 2); }
Mod operator/(Mod a, Mod b) { return Mod((long long int)a.n * inv(b).n); }
Mod operator/=(Mod &a, Mod b) { return a = a / b; }
const int MAX_N = 256;
const int MAX_K = 1024;
Mod cur[MAX_N][MAX_K], nex[MAX_N][MAX_K];
int n, k;
int a[MAX_N];
Mod ans;
int main() {
  scanf("%d %d", &n, &k);
  for (long long int i = (0); i < (long long int)(n); i++) scanf("%d", &a[i]);
  sort(a, a + n);
  cur[1][0] = cur[0][0] = 1;
  for (long long int i = (1); i < (long long int)(n); i++) {
    for (long long int j = (0); j < (long long int)(n); j++)
      for (long long int l = (0); l < (long long int)(k + 1); l++)
        nex[j][l] = 0;
    for (long long int j = (0); j < (long long int)(i + 1); j++)
      for (long long int l = (0);
           l < (long long int)(k - j * (a[i] - a[i - 1]) + 1); l++) {
        nex[j + 1][l + j * (a[i] - a[i - 1])] += cur[j][l];
        if (j > 0) nex[j - 1][l + j * (a[i] - a[i - 1])] += cur[j][l] * j;
        nex[j][l + j * (a[i] - a[i - 1])] += cur[j][l] * (j + 1);
      }
    swap(nex, cur);
  }
  for (long long int i = (0); i < (long long int)(k + 1); i++) ans += cur[0][i];
  printf("%d\n", (int)ans.n);
  return 0;
}
