#include <bits/stdc++.h>
using namespace std;
const int m = 1e9 + 7;
int mul(int a, int b) { return (long long)a * b % m; }
void add(int &a, int b) {
  a += b;
  if (a >= m) a -= m;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(nullptr);
  cout.tie(nullptr);
  int n, v;
  cin >> n >> v;
  vector<int> a(n + 1);
  for (int i = 1; i <= n; i++) cin >> a[i];
  sort(a.begin() + 1, a.end());
  vector<vector<int>> dp(n + 1, vector<int>(v + 1));
  dp[0][0] = 1;
  for (int i = 1; i <= n; i++) {
    vector<vector<int>> new_dp(n + 1, vector<int>(v + 1));
    for (int j = 0; 2 * j <= n; j++) {
      for (int k = 0; k <= v; k++) {
        int diff = a[i] - a[i - 1], get = k + j * diff;
        if (get > v) break;
        add(new_dp[j][get], mul(j + 1, dp[j][k]));
        add(new_dp[j + 1][get], dp[j][k]);
        if (j > 0) add(new_dp[j - 1][get], mul(j, dp[j][k]));
      }
    }
    swap(dp, new_dp);
  }
  int ans = 0;
  for (int j = 0; j <= v; j++) add(ans, dp[0][j]);
  cout << ans << '\n';
}
