#include <bits/stdc++.h>
using namespace std;
const int iinf = 1e9 + 10;
const long long inf = 1ll << 60;
const long long mod = 1e9 + 7;
void GG() {
  cout << "0\n";
  exit(0);
}
long long mpow(long long a, long long n, long long mo = mod) {
  long long re = 1;
  while (n > 0) {
    if (n & 1) re = re * a % mo;
    a = a * a % mo;
    n >>= 1;
  }
  return re;
}
long long inv(long long b, long long mo = mod) {
  if (b == 1) return b;
  return (mo - mo / b) * inv(mo % b, mo) % mo;
}
const int maxn = 3e3 + 5;
long long dp[2][1005][205];
int a[205];
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  ;
  int n;
  cin >> n;
  int K;
  cin >> K;
  for (int i = 1; i <= n; ++i) cin >> a[i];
  sort(a + 1, a + n + 1);
  dp[0][0][0] = 1;
  bool dpat = 0;
  long long re = 0;
  for (int i = 1; i <= n; ++i) {
    dpat ^= 1;
    for (int m = 0; m < n + 1; ++m) {
      for (int j = 0; j < K + 1; ++j) {
        dp[dpat][j][m] = 0;
        for (int frm = m - 1; frm <= m + 1; ++frm) {
          int chg = frm * (a[i] - a[i - 1]);
          if (j - chg >= 0 && frm >= 0) {
            ;
            if (frm == m + 1)
              dp[dpat][j][m] += dp[dpat ^ 1][j - chg][frm] * frm % mod;
            else if (frm == m)
              dp[dpat][j][m] += dp[dpat ^ 1][j - chg][frm] * (frm + 1) % mod;
            else
              dp[dpat][j][m] += dp[dpat ^ 1][j - chg][frm];
          }
        }
        dp[dpat][j][m] %= mod;
        if (i == n && m == 0) {
          re += dp[dpat][j][m];
        };
      }
    }
  }
  cout << re % mod << '\n';
}
