#include <bits/stdc++.h>
using namespace std;
const long long MAX_N = 200, MAX_K = 1000;
int n, k, arr[MAX_N + 5], dp[MAX_N + 5][MAX_N + 5][MAX_K + 5];
int solve(long long i, long long j, long long k) {
  if (k < 0 || j < 0) return 0;
  if (i == n + 1) return !j;
  int &ret = dp[i][j][k];
  if (ret != -1) return ret;
  k -= j * (arr[i] - arr[i - 1]);
  return ret = ((solve(i + 1, j + 1, k) +
                 solve(i + 1, j, k) * (j + 1) % 1000000007ll) %
                    1000000007ll +
                solve(i + 1, j - 1, k) * j % 1000000007ll) %
               1000000007ll;
}
int main(int argc, const char *argv[]) {
  scanf("%d%d", &n, &k);
  for (long long(i) = (1); i <= (long long)(n); (i)++) scanf("%d", &arr[i]);
  sort(arr, arr + n + 1);
  memset(dp, -1, sizeof dp);
  printf("%d\n", solve(1, 0, k));
  return 0;
}
