#include <bits/stdc++.h>
using namespace std;
long long dp[2][205][1005];
int a[205];
int main() {
  int n, m, i, j, k;
  long long t, temp;
  while (scanf("%d%d", &n, &m) != EOF) {
    for (i = 1; i <= n; i++) {
      scanf("%d", &a[i]);
    }
    sort(a + 1, a + 1 + n);
    a[0] = 0;
    int tot = 0;
    dp[0][0][0] = 1;
    for (i = 1; i <= n; i++) {
      memset(dp[1 ^ tot], 0, sizeof(dp[1 ^ tot]));
      for (j = 0; j < i; j++) {
        for (k = 0; k <= m; k++) {
          if (dp[tot][j][k]) {
            t = dp[tot][j][k];
            if (j * (a[i] - a[i - 1]) + k > m) continue;
            temp = j * (a[i] - a[i - 1]) + k;
            dp[1 ^ tot][j][temp] = (dp[1 ^ tot][j][temp] + t) % 1000000007;
            dp[1 ^ tot][j + 1][temp] =
                (dp[1 ^ tot][j + 1][temp] + t) % 1000000007;
            dp[1 ^ tot][j][temp] =
                (dp[1 ^ tot][j][temp] + j * t % 1000000007) % 1000000007;
            if (j)
              dp[1 ^ tot][j - 1][temp] =
                  (dp[1 ^ tot][j - 1][temp] + j * t % 1000000007) % 1000000007;
          }
        }
      }
      tot = 1 ^ tot;
    }
    long long sum = 0;
    for (k = 0; k <= m; k++) {
      sum += dp[tot][0][k];
      if (sum >= 1000000007) sum -= 1000000007;
    }
    printf("%I64d\n", sum);
  }
  return 0;
}
