#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
int a[222];
int dp[201][102][1002];
void ADD(int &x, long long v) { x = (x + v) % MOD; }
int main() {
  int N, K;
  scanf("%d%d", &N, &K);
  int mm = N / 2;
  for (int i = 0; i < (N); ++i) scanf("%d", &(a[i]));
  sort(a, a + N);
  dp[0][1][0] = dp[0][0][0] = 1;
  for (int i = (1); i < (N); ++i) {
    for (int j = 0; j < (mm + 1); ++j) {
      for (int k = 0; k < (K + 1); ++k) {
        if (!dp[i - 1][j][k]) continue;
        if (k + j * (a[i] - a[i - 1]) <= K)
          ADD(dp[i][j][k + j * (a[i] - a[i - 1])], dp[i - 1][j][k] * (j + 1LL));
        if (k + j * (a[i] - a[i - 1]) <= K)
          ADD(dp[i][j + 1][k + j * (a[i] - a[i - 1])], dp[i - 1][j][k]);
        if (k + j * (a[i] - a[i - 1]) <= K && j)
          ADD(dp[i][j - 1][k + j * (a[i] - a[i - 1])],
              dp[i - 1][j][k] * (long long)j);
      }
    }
  }
  int an = 0;
  for (int j = 0; j < (K + 1); ++j) ADD(an, dp[N - 1][0][j]);
  cout << an << endl;
  return 0;
}
