#include<iostream>
#include<climits>
#include<queue>
#include<vector>
using namespace std;
#define maxn 501
#define maxk 101
int n,k,ma[maxn][maxn],len;
int dgr[maxn];
queue<int>q;
int f[maxn][maxk];
struct point
{
int x,y;
}pt[maxn];
int main(){
scanf("%d %d",&n,&k);
for(register int i=1;i<=n;++i){
scanf("%d %d",&pt[i].x,&pt[i].y);
for(int j=0;j<=k;++j)
f[i][j]=1;
}
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j){
ma[i][j]=INT_MAX;
if(i!=j&&pt[j].x>=pt[i].x&&pt[j].y>=pt[i].y&&pt[j].x-pt[i].x+pt[j].y-pt[i].y-1<=k){
ma[i][j]
=pt[j].x-pt[i].x+pt[j].y-pt[i].y-1;
dgr[j]++;
}
}
for(int i=1;i<=n;++i)
if(!dgr[i]){
q.push(i);
}
while(!q.empty()){
auto c=q.front();
q.pop();
for(int i=1;i<=n;++i){
if(ma[c][i]==INT_MAX)continue;
for(int m=ma[c][i];m<=k;++m)
for(int j=k;j>=m;--j){
f[i][j]=max(1+f[c][m],f[i][j]);
len=max(len,f[i][j]+k);
}
if((--dgr[i])==0){
q.push(i);
}
}
}
cout << len;
return 0;
}