#include<iostream>
#include<algorithm>
using namespace std;
int main(){
long long a[50005],b[50005],right=2 ,num=0,ans=0,n,k;//b数组用来存在i-1的左边最多能放多少颗钻石,right为左边界,left为右边界,num用来存每次左边的最大值;
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1);
for(int i=1;i<=n;i++){//用i来模拟left
while(a[right]<=a[i]+k&&right!=n) right++;//判断当边界没有到最大时,就把右边界扩大
b[right]=max(right-i,b[right]);//右边最大值
num=max(num,b[i]);//左边最大值
ans=max(ans,num+right-i);//两个答案互相比较
}
cout<<ans;//输出答案
}