#include <bits/stdc++.h>
using namespace std;
int N, K;
int A[201];
const int mod = 1e9 + 7;
int f[201][101][1001];
int get(int l, int r) { return A[r] - A[l - 1]; }
int main() {
  cin >> N >> K;
  for (int i = 1; i <= N; ++i) cin >> A[i];
  sort(A + 1, A + N + 1);
  for (int i = 1; i <= N; ++i) A[i] += A[i - 1];
  f[0][0][0] = 1;
  for (int i = 0; i < N; ++i)
    for (int j = 0; j <= i && j <= N - i; ++j)
      for (int k = 0; k <= K; ++k)
        if (f[i][j][k]) {
          int cost = k - get(i + 1, i + j);
          if (j <= N - i - 1 && cost + get(i + 2, i + j + 1) <= K)
            f[i + 1][j][cost + get(i + 2, i + j + 1)] =
                (f[i + 1][j][cost + get(i + 2, i + j + 1)] +
                 f[i][j][k] * 1ll * (j + 1)) %
                mod;
          if (j + 1 <= N - i - 1 &&
              cost + get(i + 2, i + j + 2) - get(i + 1, i + 1) <= K)
            f[i + 1][j + 1][cost + get(i + 2, i + j + 2) - get(i + 1, i + 1)] =
                (f[i + 1][j + 1]
                  [cost + get(i + 2, i + j + 2) - get(i + 1, i + 1)] +
                 f[i][j][k]) %
                mod;
          if (j && cost + get(i + 1, i + j) <= K)
            f[i + 1][j - 1][cost + get(i + 1, i + j)] =
                (f[i + 1][j - 1][cost + get(i + 1, i + j)] +
                 f[i][j][k] * 1ll * j) %
                mod;
        }
  int sum = 0;
  for (int i = 0; i <= K; ++i) sum = (sum + f[N][0][i]) % mod;
  cout << sum << endl;
}
