#include <bits/stdc++.h>
#pragma GCC optimize("-Ofast", "-funroll-all-loops")
using namespace std;
const int MAXN = 205, mod = 1e9 + 7, MAXK = 1005;
inline int add(int first, int second) {
  return first + second > mod ? first + second - mod : first + second;
}
inline int mul(int first, int second) { return 1ll * first * second % mod; }
int a[MAXN], dp[MAXN][MAXN][MAXK];
int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  int n, K, temp, ans = 0;
  cin >> n >> K;
  for (int(i) = (0); (i) < (n); (i) += (1)) cin >> a[i];
  sort(a, a + n);
  dp[0][0][0] = 1;
  for (int(i) = (0); (i) < (n); (i) += (1)) {
    for (int(j) = (0); (j) <= (n); (j) += (1)) {
      temp = i ? j * (a[i] - a[i - 1]) : 0;
      for (int(k) = (0); (k) <= (K - temp); (k) += (1)) {
        dp[i + 1][j][k + temp] = add(dp[i + 1][j][k + temp], dp[i][j][k]);
        dp[i + 1][j][k + temp] =
            add(dp[i + 1][j][k + temp], mul(dp[i][j][k], j));
        if (j < n)
          dp[i + 1][j + 1][k + temp] =
              add(dp[i + 1][j + 1][k + temp], dp[i][j][k]);
        if (j > 0)
          dp[i + 1][j - 1][k + temp] =
              add(dp[i + 1][j - 1][k + temp], mul(dp[i][j][k], j));
      }
    }
  }
  for (int(i) = (0); (i) <= (K); (i) += (1)) ans = add(ans, dp[n][0][i]);
  cout << ans << endl;
}
