#include <bits/stdc++.h>
using namespace std;
const int N = 220, K = 1020, Mod = 1e9 + 7;
inline int inc(int a, int b) { return a + b >= Mod ? a + b - Mod : a + b; }
inline int dec(int a, int b) { return a - b < 0 ? a - b + Mod : a - b; }
inline int mul(int a, int b) { return 1LL * a * b % Mod; }
inline void Inc(int &a, int b) { return void(a = inc(a, b)); }
inline void Dec(int &a, int b) { return void(a = dec(a, b)); }
inline void Mul(int &a, int b) { return void(a = mul(a, b)); }
int n, k, a[N], c[N], f[2][N][K], Ans;
int main(void) {
  scanf("%d%d", &n, &k);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  sort(a + 1, a + n + 1);
  for (int i = 1; i <= n; i++) c[i] = a[i] - a[i - 1];
  f[0][0][0] = 1;
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j <= n; j++)
      for (int l = 0; l <= k; l++) f[i & 1][j][l] = 0;
    for (int j = 0; j <= i; j++)
      for (int l = 0; l <= k; l++) {
        if (l >= j * c[i])
          Inc(f[i & 1][j][l], mul(j, f[i - 1 & 1][j][l - j * c[i]]));
        if (l >= (j + 1) * c[i])
          Inc(f[i & 1][j][l],
              mul(j + 1, f[i - 1 & 1][j + 1][l - (j + 1) * c[i]]));
        if (j && l >= (j - 1) * c[i])
          Inc(f[i & 1][j][l], f[i - 1 & 1][j - 1][l - (j - 1) * c[i]]);
        if (l >= j * c[i]) Inc(f[i & 1][j][l], f[i - 1 & 1][j][l - j * c[i]]);
      }
  }
  for (int i = 0; i <= k; i++) Inc(Ans, f[n & 1][0][i]);
  return printf("%d\n", Ans) * 0;
}
