#include<algorithm>
#include<cstdio>
using namespace std;
int main(int argc,char **argv){
int maxn,maxm;
scanf("%d %d",&maxn,&maxm);
pair<int,int> *data=new pair<int,int>[maxn+1];
int *queue=new int[maxn+1];
bool *flag1=new bool[maxn+1];
bool *flag2=new bool[maxn+1];
int top1,top2;
data[0]=make_pair(0,0);
for(int iter=1;iter<=maxn;++iter){
scanf("%d %d",&data[iter].first,&data[iter].second);
};
sort(data+1,data+1+maxn);
top1=top2=0;
for(int iter=1;iter<=maxn;++iter){
queue[iter]=0;
flag1[iter]=false;
};
for(int iter=1;iter<=maxn;++iter){
while(data[iter].first-maxm>data[queue[top1]].first&&top1<=top2&&top1<=maxn){
++top1;
};
if(data[queue[top1]].second>=data[iter].second*2){
flag1[iter]=true;
};
while(data[iter].second>data[queue[top2]].second&&top1<=top2&&top2>=0){
--top2;
};
queue[++top2]=iter;
};
int answer=0;
for(int iter=1;iter<=maxn;++iter){
queue[iter]=0;
flag2[iter]=false;
};
top1=top2=0;
for(int iter=maxn;iter>=1;--iter){
while(data[iter].first+maxm<data[queue[top1]].first&&top1<=top2&&top1<=maxn){
++top1;
};
if(data[queue[top1]].second>=data[iter].second*2){
flag2[iter]=true;
};
while(data[iter].second>data[queue[top2]].second&&top1<=top2&&top2>=0){
--top2;
};
queue[++top2]=iter;
};
for(int iter=1;iter<=maxn;++iter){
if(flag1[iter]&&flag2[iter]){
++answer;
};
};
printf("%d",answer);
return 0;
};