#include <bits/stdc++.h>

using namespace std;

using ll = long long;

const double eps = 1e-10;
const int MOD = 1000000007;
const int INF = 1000000000;
const ll LINF = 1ll<<50;

template<typename T>
void printv(const vector<T>& s) {
  for(int i=0;i<(int)(s.size());++i) {
    cout << s[i];
    if(i == (int)(s.size())-1) cout << endl;
    else cout << " ";
  }
}

int main () {
  cin.tie(0);
  cout << fixed << setprecision(10);
  int n, t; cin >> n >> t;
  vector<int> d(n);
  for(int i=0;i<n;++i) {
    cin >> d[i];
  }

  sort(d.begin(), d.end());

  vector<ll> dp(n+1);
  dp[0] = 1;

  for(int i=1;i<n;++i) {
    int tmp = distance(d.begin(), lower_bound(d.begin(), d.end(), d[i] - t));
    dp[i] = dp[i-1] * (i-tmp+1);
    dp[i] %= MOD;
  }

  cout << dp[n-1] << endl;

}

