#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int x = 0, w = 0;
  char ch = getchar();
  while (!isdigit(ch)) w |= ch == '-', ch = getchar();
  while (isdigit(ch)) x = (x << 1) + (x << 3) + ch - '0', ch = getchar();
  return w ? -x : x;
}
int n, m, ans, w[203], f[203][203][1020];
inline void add(int &a, int b) {
  a += b;
  if (a >= 1000000007) a -= 1000000007;
}
signed main() {
  n = read(), m = read();
  for (int i = 1; i <= n; ++i) w[i] = read();
  sort(w + 1, w + 1 + n);
  f[0][0][0] = 1;
  for (int i = 0; i < n; ++i)
    for (int j = 0; j <= i; ++j) {
      int v = (w[i + 1] - w[i]) * j;
      for (int k = 0; k <= m - v; ++k) {
        add(f[i + 1][j][k + v], f[i][j][k]);
        add(f[i + 1][j + 1][k + v], f[i][j][k]);
        add(f[i + 1][j][k + v], 1ll * f[i][j][k] * j % 1000000007);
        if (j != 0)
          add(f[i + 1][j - 1][k + v], 1ll * f[i][j][k] * j % 1000000007);
      }
    }
  int ans = 0;
  for (int i = 0; i <= m; ++i) add(ans, f[n][0][i]);
  printf("%d\n", ans);
  return 0;
}
