#include <iostream>
#include <algorithm>
#include <functional>
#include <vector>
using namespace std;
typedef long long ll;
#define all(v) (v).begin(),(v).end()
#define rep(i,n) for(ll i=0;i<(n);i++)

const ll mod = 1000000007;

int main(void){
	ll n; ll t;
	cin >> n >> t;
	vector<ll> d(n);
	rep(i, n) scanf("%lld", &d[i]);

	sort(all(d));
	ll ans = 1;
	//????????\????????´????????¢?????????????????????????¢??????????????????¨??????????????????????????§???????????¢?´¢??¨???lower_bound??¢??°(???????????????"??\???"???????´?????????????????????????????????????)
	//i + 1????????§?????\??£???????????°???????????¨??????????°??????°????????\?????????
	//lower_bound????????£???????????¶????????????????????°???????????????????????¶????????????????????°??????????¨?????¨???????????????¨???(i + 1)??????????????°??????????????°???????????????????????????
	rep(i, n){
		ans = ans * (i + 1 - (ll)(lower_bound(d.begin(), d.begin() + i + 1, d[i] - t) - d.begin())) % mod;
	}

    printf("%lld\n", ans % mod);
    return 0;
}