#include<cstdio>
#include<math.h>
#include<algorithm>
#include<vector>
#include<queue>
#include<string>
#include<set>
#include<cstring>
 
 
using namespace std;
#define int long long int
#define rep(i,n) for(int i=0;i<n;i++)
#define INF 1001001001
#define LLINF 1001001001001001001
#define mp make_pair
#define pb push_back

int N,D,A;
int X[100005],H[100005];
pair<int,int> XH[100005];
signed main(){
    scanf("%lld %lld %lld",&N,&D,&A);
    rep(i,N){
        scanf("%lld %lld",&X[i],&H[i]);
        XH[i]=mp(X[i],H[i]);
    }
    sort(XH,XH+N);
    int ans=0;
    int BOMBED[100005];
    rep(i,N)BOMBED[i]=0;
    rep(itr,N){
        if(itr>0){//累積和をまくる
            BOMBED[itr]+=BOMBED[itr-1];
            //すでに爆破された分の体力を引く
            XH[itr].second-=A*BOMBED[itr];
        }
        if(XH[itr].second>0){
            //自分を減らす
            int b=XH[itr].second/A+(XH[itr].second%A==1);
            //自分以降の減少累積和に一を足しておく
            BOMBED[itr+1]+=b;
            ans+=b;
            int upperbomitr=upper_bound(XH,XH+N,mp(XH[itr+1].first+2*D,(int)-LLINF))-XH;
            BOMBED[upperbomitr]-=b;
        }
    }
    
    printf("%lld\n",ans);
    return 0;
}
