import math,bisect

n,d,a = list(map(int,input().split()))

lst1 = [list(map(int,input().split())) for i in range(n)]

lst1.sort()



#解法2 - imos法

"""

単純に座標に対してimos法を行うと、座標の制約は10**9なので間に合わない。

process1

そこで、各モンスターに対して、そのモンスターを左端で攻撃を行った際、右側の巻き込めるモンスターのインデックスを

保存するリストを作る。

process2

これにより、imosのテーブルはn+1個で答えを求めることができる。

また、imosの累積和は順次求めていく感じになる。

"""

x = []

for i in lst1:

    x.append(i[0])



#process1

index = 0

reach = []

for i in range(n):

    index = bisect.bisect_right(x,lst1[i][0]+2*d)

    reach.append(index)



#process2

ans = 0

imos = [0]*(n+1) #その座標に効いている魔法の回数(ダメージ量ではない)



for i in range(n):

    if imos[i]*a < lst1[i][1]: #ダメージが足りないなら

        need = math.ceil((lst1[i][1]-imos[i]*a)/a)

        imos[i] += need

        imos[reach[i]] -= need #届かなくなったとこでマイナス

        ans += need

    imos[i+1] += imos[i] #累積和を逐一とる



print(ans)
import math

from collections import deque

n,d,a = list(map(int,input().split()))

lst1 = [list(map(int,input().split())) for i in range(n)]

lst1.sort()



#解法1 - 貪欲法

"""

キューを使った貪欲法で間に合わせる。

que = [[ダメージ量,そのダメージがどこまで使えるか],...]

とすることにより、高速にダメージ管理をすることができる。

"""



que = deque()

ans = 0

dmg = 0



for i in range(n):

    while que:

        lim = que.popleft()

        if lst1[i][0] > lim[1]:

            dmg -= lim[0]

        else:

            que.appendleft(lim)

            break

    

    if lst1[i][1] > dmg:

        need = math.ceil((lst1[i][1]-dmg)/a)

        ans += need

        dmg += need*a

        que.append([need*a,lst1[i][0]+2*d])



print(ans)

import math, bisect

n, d, a = list(map(int, input().split()))
lst1 = [list(map(int, input().split())) for i in range(n)]
lst1.sort()
# 解法2 - imos法
"""
単純に座標に対してimos法を行うと、座標の制約は10**9なので間に合わない。
process1
そこで、各モンスターに対して、そのモンスターを左端で攻撃を行った際、右側の巻き込めるモンスターのインデックスを
保存するリストを作る。
process2
これにより、imosのテーブルはn+1個で答えを求めることができる。
また、imosの累積和は順次求めていく感じになる。
"""
x = []
for i in lst1:
    x.append(i[0])
# process1
index = 0
reach = []
for i in range(n):
    index = bisect.bisect_right(x, lst1[i][0] + 2 * d)
    reach.append(index)
# process2
ans = 0
imos = [0] * (n + 1)  # その座標に効いている魔法の回数(ダメージ量ではない)
for i in range(n):
    if imos[i] * a < lst1[i][1]:  # ダメージが足りないなら
        need = math.ceil((lst1[i][1] - imos[i] * a) / a)
        imos[i] += need
        imos[reach[i]] -= need  # 届かなくなったとこでマイナス
        ans += need
    imos[i + 1] += imos[i]  # 累積和を逐一とる
print(ans)

import math
from collections import deque

n, d, a = list(map(int, input().split()))
lst1 = [list(map(int, input().split())) for i in range(n)]
lst1.sort()
# 解法1 - 貪欲法
"""
キューを使った貪欲法で間に合わせる。
que = [[ダメージ量,そのダメージがどこまで使えるか],...]
とすることにより、高速にダメージ管理をすることができる。
"""
que = deque()
ans = 0
dmg = 0
for i in range(n):
    while que:
        lim = que.popleft()
        if lst1[i][0] > lim[1]:
            dmg -= lim[0]
        else:
            que.appendleft(lim)
            break
    if lst1[i][1] > dmg:
        need = math.ceil((lst1[i][1] - dmg) / a)
        ans += need
        dmg += need * a
        que.append([need * a, lst1[i][0] + 2 * d])
print(ans)

-import math, bisect +import math +from collections import deque -# 解法2 - imos法 +# 解法1 - 貪欲法 -単純に座標に対してimos法を行うと、座標の制約は10**9なので間に合わない。 -process1 -そこで、各モンスターに対して、そのモンスターを左端で攻撃を行った際、右側の巻き込めるモンスターのインデックスを -保存するリストを作る。 -process2 -これにより、imosのテーブルはn+1個で答えを求めることができる。 -また、imosの累積和は順次求めていく感じになる。 +キューを使った貪欲法で間に合わせる。 +que = [[ダメージ量,そのダメージがどこまで使えるか],...] +とすることにより、高速にダメージ管理をすることができる。 -x = [] -for i in lst1: -    x.append(i[0]) -# process1 -index = 0 -reach = [] +que = deque() +ans = 0 +dmg = 0 -    index = bisect.bisect_right(x, lst1[i][0] + 2 * d) -    reach.append(index) -# process2 -ans = 0 -imos = [0] * (n + 1)  # その座標に効いている魔法の回数(ダメージ量ではない) -for i in range(n): -    if imos[i] * a < lst1[i][1]:  # ダメージが足りないなら -        need = math.ceil((lst1[i][1] - imos[i] * a) / a) -        imos[i] += need -        imos[reach[i]] -= need  # 届かなくなったとこでマイナス +    while que: +        lim = que.popleft() +        if lst1[i][0] > lim[1]: +            dmg -= lim[0] +        else: +            que.appendleft(lim) +            break +    if lst1[i][1] > dmg: +        need = math.ceil((lst1[i][1] - dmg) / a) -    imos[i + 1] += imos[i]  # 累積和を逐一とる +        dmg += need * a +        que.append([need * a, lst1[i][0] + 2 * d])