#include <bits/stdc++.h>
using namespace std;
const int N = 210;
const int INF = 0x3f3f3f3f;
const long long mod = 1e9 + 7;
long long v[N];
int dp[205][205][1005];
int n, m;
long long f(int x, long long y, int z) {
  if (z > m) return 0;
  if (dp[x][y][z] >= 0) return dp[x][y][z];
  if (x > n) {
    if (y) return 0;
    return 1;
  }
  if (y == 0) {
    return dp[x][y][z] = (f(x + 1, y + 1, z) + f(x + 1, y, z)) % mod;
  }
  return dp[x][y][z] = (f(x + 1, y + 1, z + y * (v[x] - v[x - 1])) +
                        f(x + 1, y, z + y * (v[x] - v[x - 1])) +
                        y * f(x + 1, y, z + y * (v[x] - v[x - 1])) +
                        y * f(x + 1, y - 1, z + y * (v[x] - v[x - 1]))) %
                       mod;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int leallindo;
  cin >> n >> m;
  for (int i = 1; i <= n; i++) {
    cin >> v[i];
  }
  sort(v + 1, v + n + 1);
  memset(dp, -1, sizeof(dp));
  cout << f(1, 0, 0) << "\n";
}
