#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1.0);
const double eps = 1e-6;
const int mod = 1000000000 + 7;
const int INF = 1000000000;
const int maxn = 200 + 10;
int T, n, k, a[maxn], vis[maxn][maxn][1000 + 10], kase = 1;
long long d[2][maxn][1000 + 10];
int main() {
  scanf("%d%d", &n, &k);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  sort(a + 1, a + n + 1);
  a[0] = a[1];
  int u = 0;
  d[u][0][0] = 1;
  for (int i = 1; i <= n; i++) {
    u ^= 1;
    memset(d[u], 0, sizeof(d[u]));
    for (int j = 0; j <= n; j++) {
      int add = (a[i] - a[i - 1]);
      for (int v = 0; v <= k; v++) {
        if (!d[u ^ 1][j][v]) continue;
        if (v + j * add > k) break;
        d[u][j][v + j * add] = (d[u][j][v + j * add] + d[u ^ 1][j][v]) % mod;
        d[u][j][v + j * add] =
            (d[u][j][v + j * add] + d[u ^ 1][j][v] * j % mod) % mod;
        if (j > 0) {
          d[u][j - 1][v + j * add] =
              (d[u][j - 1][v + j * add] + d[u ^ 1][j][v] * j % mod) % mod;
        }
        d[u][j + 1][v + j * add] =
            (d[u][j + 1][v + j * add] + d[u ^ 1][j][v]) % mod;
      }
    }
  }
  long long ans = 0;
  for (int i = 0; i <= k; i++) {
    ans = (ans + d[u][0][i]) % mod;
  }
  printf("%I64d\n", ans);
  return 0;
}
