#include <bits/stdc++.h>
#define SZ(X) ((int)(X).size())
#define ALL(X) (X).begin(), (X).end()
#define REP(I, N) for (int I = 0; I < (N); ++I)
#define REPP(I, A, B) for (int I = (A); I < (B); ++I)
#define RI(X) scanf("%d", &(X))
#define RII(X, Y) scanf("%d%d", &(X), &(Y))
#define RIII(X, Y, Z) scanf("%d%d%d", &(X), &(Y), &(Z))
#define DRI(X) int (X); scanf("%d", &X)
#define DRII(X, Y) int X, Y; scanf("%d%d", &X, &Y)
#define DRIII(X, Y, Z) int X, Y, Z; scanf("%d%d%d", &X, &Y, &Z)
#define RS(X) scanf("%s", (X))
#define CASET int ___T, case_n = 1; scanf("%d ", &___T); while (___T-- > 0)
#define MP make_pair
#define PB push_back
#define MS0(X) memset((X), 0, sizeof((X)))
#define MS1(X) memset((X), -1, sizeof((X)))
#define LEN(X) strlen(X)
#define PII pair<int,int>
#define VI vector<int>
#define VPII vector<pair<int,int> >
#define PLL pair<long long,long long>
#define VPLL vector<pair<long long,long long> >
#define F first
#define S second
typedef long long LL;
using namespace std;
const int MOD = 1e9+7;
const int SIZE = 1e6+1;
VPLL pp;
int BIT[SIZE];
void ins(int x,int v){
for(;x<SIZE;x+=x&-x)BIT[x]=max(BIT[x],v);
}
int qq(int x){
int res=0;
for(;x;x-=x&-x)res=max(BIT[x],res);
return res;
}
int LIS(LL a[],int N){
static LL d[SIZE];
REP(i,N)
d[i]=a[i];
sort(d,d+N);
int m=unique(d,d+N)-d;
REP(i,N){
a[i]=lower_bound(d,d+m,a[i])-d+1;
}
int an=0;
REP(i,N){
int me=qq(a[i])+1;
an=max(an,me);
ins(a[i],me);
}
return an;
}
LL a[SIZE];
int main(){
DRII(n,D);
REP(i,n){
DRII(x,t);
pp.PB(MP(x+D*(LL)t,-x+D*(LL)t));
if(pp.back().F<0||pp.back().S<0)pp.pop_back();
}
sort(ALL(pp));
REP(i,SZ(pp))a[i]=pp[i].S;
printf("%d\\n",LIS(a,SZ(pp)));
return 0;
}