#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000000007;
const int MAXN = 205;
const int MAXH = 105;
const int MAXK = 1005;
int N, K, A[MAXN];
long long dp[2][MAXH][MAXK], res;
int main() {
  cin >> N >> K;
  for (int i = 1; i <= N; i++) {
    cin >> A[i];
  }
  sort(A + 1, A + N + 1);
  A[0] = A[1];
  dp[0][0][0] = 1;
  for (int i = 1; i <= N; i++) {
    int r = i % 2;
    memset(dp[r], 0, sizeof(dp[r]));
    for (int j = 0; j + 1 < MAXH; j++) {
      for (int k = 0; k <= K; k++) {
        if (j > 0) {
          int d = (j - 1) * (A[i] - A[i - 1]);
          if (k >= d) {
            dp[r][j][k] += dp[r ^ 1][j - 1][k - d];
            dp[r][j][k] %= MOD;
          }
        }
        if (j + 1 < MAXH) {
          int d = (j + 1) * (A[i] - A[i - 1]);
          if (k >= d) {
            dp[r][j][k] += dp[r ^ 1][j + 1][k - d] * (j + 1) % MOD;
            dp[r][j][k] %= MOD;
          }
        }
        int d = j * (A[i] - A[i - 1]);
        if (k >= d) {
          dp[r][j][k] += dp[r ^ 1][j][k - d] * j % MOD;
          dp[r][j][k] %= MOD;
        }
        if (k >= d) {
          dp[r][j][k] += dp[r ^ 1][j][k - d];
          dp[r][j][k] %= MOD;
        }
      }
    }
  }
  for (int i = 0; i <= K; i++) {
    res += dp[N % 2][0][i];
    res %= MOD;
  }
  cout << res << '\n';
}
