#include <bits/stdc++.h>
using namespace std;
int add(int x, int y) {
  x = (x + y);
  if (x >= 1000000007) x -= 1000000007;
  if (x < 0) x += 1000000007;
  return x;
}
int mul(int x, int y) { return (1LL * x * y) % 1000000007; }
int dp[200][200][1001];
int n, k, a[200];
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> k;
  for (int i = 0; i < n; i++) cin >> a[i];
  sort(a, a + n);
  dp[0][0][0] = 1;
  dp[0][1][0] = 1;
  for (int i = 1; i < n; i++) {
    int cur = (i & 1);
    int prev = (1 - cur);
    memset(dp[cur], 0, sizeof(dp[cur]));
    for (int j = 0; j <= i; j++)
      for (int z = 0; z <= k; z++) {
        int nval = (z + (j * (a[i] - a[i - 1])));
        if (nval > k) continue;
        int v = dp[prev][j][z];
        dp[cur][j][nval] = add(dp[cur][j][nval], v);
        dp[cur][j + 1][nval] = add(dp[cur][j + 1][nval], v);
        if (j > 0) dp[cur][j - 1][nval] = add(dp[cur][j - 1][nval], mul(j, v));
        if (j > 0) dp[cur][j][nval] = add(dp[cur][j][nval], mul(j, v));
      }
  }
  int ans = 0;
  for (int i = 0; i <= k; i++) ans = add(ans, dp[(n - 1) & 1][0][i]);
  cout << ans << "\n";
  return 0;
}
