/*
大连热身B题
不要低头,不要放弃,不要气馁,不要慌张
题意:
坐标平面内给很多个点,放置一个边长为r的与坐标轴平行的正方形,问最多有多少个点在正方形内部。
思路:
按照x先排序,然后确定x在合法范围内后按照y排序,进行扫描线。
*/
#include<bits/stdc++.h>
using namespace std;
bool vis[];
struct st{
void read(){
scanf("%d%d",&x,&y);
}
int x,y;
};
st jilu[];
bool cmp(st a,st b){
return a.x<b.x;
}
bool cmp2(st a,st b){
return a.y<b.y;
}
int main()
{
int n,r;
while(scanf("%d%d",&n,&r)!=EOF){
int ans=;
memset(vis,,sizeof(vis));
for(int i=;i<n;i++)jilu[i].read();
sort(jilu,jilu+n,cmp);
int ed=;
for(int i=;i<n;i++){
while(ed<n&&jilu[ed].x<=jilu[i].x+r)ed++;
sort(jilu+i,jilu+ed,cmp2);
int num=;
int st=i;
for(int j=i+;j<ed;j++){
while(jilu[st].y<jilu[j].y-r)st++;
ans=max(ans,j-st+);
}
sort(jilu+i,jilu+ed,cmp);
}
printf("%d\n",ans);
}
}