/*
     AUTHOR : Ankit Kumar
     BRANCH : Information Technology
     INSTITUTE : Birla Institute of Technology
*/
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp> // Common file
#include <ext/pb_ds/tree_policy.hpp>
#include <functional> // for less
using namespace std;
using namespace __gnu_pbds;
typedef long long int ll;
typedef tree<ll, null_type, less<ll>, rb_tree_tag,
            tree_order_statistics_node_update>
    new_data_set;
#define fast ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define pb push_back
#define MP make_pair
#define SET(a,val) memset(a,val,sizeof(a))
#define deci(n)         cout<<fixed<<setprecision(n);
#define show(a,l,r) for(int i=l;i<r;i++) cout<<a[i]<<" ";
#define all(a) (a).begin(), (a).end()
#define pll pair<ll,ll>
const int N=30103;
const int dx[] = {-1, 0, 1, 0, -1,-1, 1, 1};
const int dy[] = { 0, 1, 0,-1, -1, 1,-1, 1};
char dir[]={'L','D','R','U'};
//int dx[]={2,-2,1,-1,2,-2,1,-1};//for knights
//int dy[]={1,1,2,2,-1,-1,-2,-2};
const ll mod=1e9+7;
const ll inf=1e18+100;
ll BIT[30004];
int prime[17],spf[17];
template<typename T>T lcm(T a, T b) {return a / gcd(a,b) * b;}
template<typename T> T min3(T a,T b,T c) {return min(a,min(b,c));}
//template<typename T> T min(T a,T b) {if(a>b) return b; else return a;}
template<typename T> T max3(T a,T b,T c) {return max(a,max(b,c));}
bool isVowel(char ch){ ch=toupper(ch); if(ch=='A'||ch=='U'||ch=='I'||ch=='O'||ch=='E') return true; return false;}
ll mInv(ll a, ll m)
{
    ll m0 = m;
    ll y = 0, x = 1;
    if (m == 1)
      return 0;
    while (a > 1)
    {
        ll q = a / m;
        ll t = m;
        m = a % m, a = t;
        t = y;
        y = x - q * y;
        x = t;
    }
    if (x < 0)
       x += m0;
return x;
}
ll power(ll x, ll y)
{
    ll res = 1;
   // x = x % mod;
    while (y > 0)
    {
        if (y & 1)
            res = (res*x) ;
        y = y>>1;
        x = (x*x);
        if(res>=mod)
            res%=mod;
        if(x>=mod)
            x%=mod;
    }
    return res;
}
ll gcd(ll a,ll b)
{
    if(b==0)
        return a;
    return gcd(b,a%b);
}
void update(int x, int delta)
{
    if(!x)
    {
        BIT[x]+=delta;
        return;
    }
      for(; x <= N; x += x&-x)
        BIT[x] += delta;
}
ll query(int x)
{
     ll sum = BIT[0];
     for(; x > 0; x -= x&-x)
        sum += BIT[x];
     return sum;
}
void Sieve()
{
    for(int i=1;i<=N;i++)
        prime[i]=1;
    prime[0]=0;
    prime[1]=0;
    for (ll p=2; p*p<=N; p++)
    {
        if (prime[p] == 1)
        {
            for (ll i=p*p; i<=N; i += p)
                prime[i] = 0;
        }
    }
    for(int p=3;p<=N;p++)
        prime[p]+=prime[p-1];
}
void sieve()
{
    spf[1] = 1;
    for (int i=2; i<N; i++)
        spf[i] = i;
    for (int i=4; i<N; i+=2)
        spf[i] = 2;
    for (ll i=3; i*i<N; i++)
    {
        if (spf[i] == i)
        {
            for (ll j=i*i; j<N; j+=i)
                if (spf[j]==j)
                    spf[j] = i;
        }
    }
}
                         /******************Lets Code*******************/

bool cmp(const pair<ll,ll>&a,const pair<ll,ll>&b)
{
    if(a.first>b.first)
        return true;
    else if(a.first==b.first)
    {
        if(a.second<b.second)
            return true;
        else
            return false;
    }
    else
        return false;
}


int main()
{
    fast;
    ll n,d,a;
  cin>>n>>d>>a;
  pair<ll,ll>arr[n];
  ll x,y;
  ll sz=0;
  for(int i=0;i<n;i++)
  {
    cin>>x>>y;
    y=(ll)ceill((double)y/a);
    arr[i]={x,y};
    sz+=y;
  }
  if(d==0)
  {
      cout<<sz<<"\n";
      return 0;
  }
  sort(arr,arr+n);
  vector<ll>v;
  vector<ll>sum;
  ll ans=0;
  for(int i=0;i<n;i++)
  {
      ll p=0;
      if(v.size()!=0)
    p=lower_bound(v.begin(),v.end(),arr[i].first)-v.begin();
    p=v.size()-p;
    //cout<<"hi "<<i<<" ";
    ll x=0;
    if(p!=0)
    {
      x=sum.back();
      //cout<<"x = "<<x<<" "<<sum.size()<<"\n";
      int r=sum.size();
      if((r-1-p)>=0LL)
      {
       // cout<<"hi";
        x-=sum[sum.size()-1-p];
      }
    }
    //cout<<arr[i].second<<" "<<x<<" ";
    arr[i].second-=x;
    if(arr[i].second>0)
    {
        //cout<<i<<" "<<arr[i].second<<"\n";
      ans+=arr[i].second;
      
      ll vs=0;
      sum.push_back(ans);

      v.push_back(arr[i].first+2LL*d);
      //cout<<"hi ";
    }
  }
  cout<<ans<<"\n";
  return 0;
}


Measured memory_bytes: 5228