#include <bits/stdc++.h>
using namespace std;
inline long long powmod(long long x, long long n, long long _mod) {
  long long res = 1;
  while (n) {
    if (n & 1) res = (res * x) % _mod;
    x = (x * x) % _mod;
    n >>= 1;
  }
  return res;
}
int dx4[] = {1, -1, 0, 0};
int dy4[] = {0, 0, -1, 1};
int n, k;
int a[205];
int dp[205][205][1024];
int add(int x, int y) {
  x = x + y;
  if (x >= 1000000007) x -= 1000000007;
  return x;
}
int mul(int x, int y) {
  x = 1LL * x * y % 1000000007;
  return x;
}
int main() {
  ios_base::sync_with_stdio(0);
  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 = 0; i < n - 1; ++i) {
    for (int j = 0; j < n; ++j) {
      for (int k = 0; k < 1024; ++k) {
        int val = k + j * (a[i + 1] - a[i]);
        if (dp[i][j][k] and val < 1024) {
          dp[i + 1][j][val] = add(dp[i + 1][j][val], dp[i][j][k]);
          dp[i + 1][j + 1][val] = add(dp[i + 1][j + 1][val], dp[i][j][k]);
          dp[i + 1][j][val] = add(dp[i + 1][j][val], mul(dp[i][j][k], j));
          if (j > 0)
            dp[i + 1][j - 1][val] =
                add(dp[i + 1][j - 1][val], mul(dp[i][j][k], j));
        }
      }
    }
  }
  int ans = 0;
  for (int i = 0; i < k + 1; ++i) ans = add(ans, dp[n - 1][0][i]);
  cout << ans << '\n';
  return 0;
}
