#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
#define REP(i,b,n) for(int i=b;i<n;i++)
#define rep(i,n)   REP(i,0,n)

typedef long long ll;
const ll mod =  1000000007;

ll solve(int n,int t,vector<int> &in){
  ll ret = 1;
  sort(in.begin(),in.end());
  //rep(i,in.size())cout << in[i] <<" " ;cout << endl;
  for(int i=in.size()-1;i>=0;i--){
    int tar = in[i] + t;
    int tmp = upper_bound(in.begin(),in.end(),tar)-in.begin()-1-i;
    //cout << in[i] <<" " << tar <<" " << tmp << endl;
    ret = ret * (tmp+1);
    ret %= mod;
  }
  return ret;
}

int main(){
  int n,t;
  while(cin>>n>>t && n){
    vector<int> in(n);
    rep(i,n)cin>>in[i];
    cout << solve(n,t,in) << endl;
  }
  return 0;
}