#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL MOD=1e9+7;

#define MAX_N 100010
LL fact[3*MAX_N];

struct INIT{INIT(){
    ios::sync_with_stdio(false);cin.tie(0);
    fact[0]=1;
    for(int i = 1; i < 3*MAX_N; i++)fact[i]=fact[i-1]*i%MOD;
}}init;


// a x + b y = gcd(a, b)
// O(log (a+b) )
LL extgcd(LL a, LL b, LL &x, LL &y) {
    LL g = a; x = 1; y = 0;
    if (b != 0) g = extgcd(b, a % b, y, x), y -= (a / b) * x;
    return g;
}

// m????????¨??????a?????????
// O(log a)
LL invMod(LL a) {
    LL x, y;
    if (extgcd(a, MOD, x, y) == 1)return (x + MOD) % MOD;
    else return 0; // unsolvable
}
// k?????????n????????°??????????????????
LL calc(LL n,LL k){
    LL u=fact[n+k-1];
    LL d=fact[k-1];
    return u*invMod(d)%MOD;
}

#define rep(i,n) for(auto i=(n)*0;i<n;i++)

int main() {
    int N,T;
    cin>>N>>T;
    vector<int> cnt(3*MAX_N,0);
    rep(i,N){
	int d;
	cnt[cin>>d,d+MAX_N]++;
    }
    LL res=1;
    LL sum=1;
    for(int bg=0,ed=T;ed<3*MAX_N;bg++,ed++){
	if(cnt[ed]>0)res=res*calc(cnt[ed],sum)%MOD;
	sum=(sum+MOD+cnt[ed]-cnt[bg])%MOD;
    }
    cout<<res<<endl;
    return 0;
}