#include<iostream>
#include<cstdlib>
using namespace std;
int n,k,num[20],seq[20],vis[20],s;
void search(int id)
{
    if(id==n)
        s++;
    else
    {
        for(int i=0;i<n;++i)
            if(vis[i]==0&&abs(num[i]-seq[id-1])<=k)
            {
                if(id==n-1&&abs(num[i]-seq[0])>k)
                    continue;
                seq[id]=num[i];
                vis[i]=1;
                search(id+1);
                vis[i]=0;
            }
    }
}
int main()
{
    cin>>n>>k;
    for(int i=0;i<n;++i)
        cin>>num[i];
    seq[0]=num[0];
    vis[0]=1;
    search(1);
    cout<<s<<endl;
    return 0;
}
/*
样例中:
4 10
2 16 6 10
如果以 2 作为序列的开头, 有两种可能组合: 2 6 16 10 和 2 10 16 6
如果把 2 6 16 10 看作一环,得到 2 6 16 10 2 6 16 10 ,
可以看出,2 6 16 10 其实是和 6 16 10 2 , 16 10 2 6 , 10 2 6 16 一样的.
同样地,如果把 2 10 16 6 看作一环,得到 2 10 16 6 2 10 16 6 ,
可以看出,2 10 16 6 其实是和 10 16 6 2 , 16 6 2 10 , 6 2 10 16 一样的.
所以序列的第一个元素是什么并没有影响,你同样可以把6 作为第一个元素, 也有两种组合: 
6 16 10 2 (与 2 6 16 10 相同)   6 2 10 16 (与 2 10 16 6 相同)
但第一个元素确定下来后就不能再更改了,因为更改第一个元素后形成的序列实质上还是一样的组合
另外,看另一个例子
4 10
2 6 6
答案应该是 2 , 
要注意,在该题中,即使元素值相等,也是分属于两个元素(两头牛身高一样,但还是两头牛,并不因身高相同而变成一头牛)
于是我们应该把 2 6 6 看作 2 6(1) 6(2)  , 其中 6(1),6(2) 表示身高都为6的两头牛
所以有两种以 2 开头的可能组合 : 2 6(1) 6(2) 和 2 6(2) 6(1)   故答案是 2
*/