Language: C++


/*****/

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <iomanip>	//cout << fixed << setprecision(桁数);
#include <stdexcept>

//#define int long long

using namespace std;
using ll = long long;
using ld = long double;
using vecint = vector<int>;
using vecll = vector<long long>;
using pll = pair<long long, long long>;
template<class T> using pr = pair<T, T>;
template<class T> using vec = vector<T>;

#ifdef _MSC_VER
#define scanf scanf_s
#endif // _MSC_VER

#define nextline() (std::cerr << "\n")
#define debug(x) (std::cerr << (x) << "\n")
#define debug_tab(n, x) (std::cerr << strMulti("\t",n) << (x) << "\n")
#define debug_cout(x) (std::cerr << #x << " : " <<  (x) << "\n")
#define debug_tabcout(n, x) (std::cerr << strMulti("\t",n) << #x << " : " <<  (x) << "\n")
#define debug_headcout(h, x) (std::cerr << h << " : " <<  (x) << "\n")
#define debug_tabheadcout(n, h, x) (std::cerr << strMulti("\t",n) << h << " : " <<  (x) << "\n")

#define rep(i, n) for(ll i=0, i##_len=(n); i<i##_len; i++)
#define rep1(i, n) for(ll i=1, i##_len=(n); i<=i##_len; i++)
#define rrep(i, n) for(ll i=(n)-1; i >= 0; i--)
#define rrep1(i, n) for(ll i=(n); i > 0; i--)
#define all(x) (x).begin(), (x).end()
#define pair(a, b) make_pair(a, b)
constexpr int INF = 2000000100;
constexpr ll MOD = 1000000007;	// 10e9+7
template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return true; } return false; }
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return true; } return false; }
template<class T> inline T divup(T a, T b) { if (a % b == 0) { return a / b; } return a / b + 1; }
std::string inline strMulti(std::string t, int n) { std::string out = ""; for (int i = 0; i < n; i++) { out += t; } return out; }
//template<class T> T math_P(T m, T n) { T ret = 1; for (T i = m; i > m - n; i--) { ret *= i; } return ret; }
//template<class T> T math_C(T m, T n) { T ret = mathP(m, n); for (T i = 2; i <= n; i++) { ret /= i; } return ret; }
template<class T> inline bool compare_by_b(pair<T, T> a, pair<T, T> b) { if (a.second != b.second) { return a.second < b.second; } return a.first < b.first; }
template<class T> inline T mod_pow(T x, T n, const T& p) { T ret = 1; while (n > 0) { if (n & 1) { (ret *= x) %= p; } (x *= x) %= p; n >>= 1; } return ret; }
//inline void cinvecll(vecll& const A, ll const N) { vecll::iterator itr = A.begin(); for (int i = 0; i < N; i++) { scanf("%lld", &*itr); itr++; } }
template<class T> inline T max(T a, T b) { return a > b ? a : b; }
template<class T> inline T min(T a, T b) { return a < b ? a : b; }

//template<class T> T math_gcd(T a, T b) { a = abs(a); b = abs(b); if (a < b) { std::swap(a, b); } T tmp; while (b != 0) { tmp = b; b = a % b; a = tmp; } return a; }
//template<class T> T math_lcm(T a, T b) { a = abs(a); b = abs(b); if (a > b) { std::swap(a, b); } if (a == 1) { return b; } T i = a; while (i % b != 0) { i += a; } return i; }
//ll gcd(ll x, ll y) { return (x % y) ? gcd(y, x % y) : y; }
//ll lcm(ll x, ll y) { return x / gcd(x, y) * y; }

/*****/
void Main()
{
	ll N, D, A;
	cin >> N >> D >> A;
	vecll X(N), H(N);
	rep(i, N)
	{
		cin >> X[i] >> H[i];
	}

	vecll ids(N);
	rep(i, N)	ids[i] = i;
	sort(all(ids),
		[&](int i, int j) {return X[i] < X[j]; }
	);
	vecll tmpX(N), tmpH(N);
	rep(i, N)
	{
		tmpX[i] = X[ids[i]]; tmpH[i] = H[ids[i]];
	}
	X = tmpX; H = tmpH;

	ll res = 0;
	vecll S(N + 1);
	rep(i, N)
	{
		debug_cout(i);

		if (S[i] < H[i])
		{
			ll atkCnt = divup(H[i] - S[i], A);
			debug_tabcout(1, atkCnt);

			ll rightX = X[i] + D * 2;
			ll rightID = upper_bound(all(X), right) - X.begin();

			S[i] += atkCnt * A;
			S[rightID] -= atkCnt * A;
			res += atkCnt;
		}

		S[i + 1] += S[i];
	}

	rep(i, N)
	{
		debug_cout(i);
		debug_tabcout(1, X[i]);
		debug_tabcout(1, H[i]);
	}

	cout << res;
}

/*****/

int main()
{
	std::ios::sync_with_stdio(false);
	std::cin.tie(0);

	//std::cout << std::fixed << std::setprecision(10);

	/*
	while (true)
	{
		Main();
		cout << endl;
	}
	//*/


	Main();

	return 0;
}


Compiler output:
In file included from /usr/include/c++/14/bits/stl_algobase.h:71,
                 from /usr/include/c++/14/string:51,
                 from /usr/include/c++/14/bits/locale_classes.h:40,
                 from /usr/include/c++/14/bits/ios_base.h:41,
                 from /usr/include/c++/14/ios:44,
                 from /usr/include/c++/14/ostream:40,
                 from /usr/include/c++/14/iostream:41,
                 from a.cc:4:
/usr/include/c++/14/bits/predefined_ops.h: In instantiation of 'bool __gnu_cxx::__ops::_Val_less_iter::operator()(_Value&, _Iterator) const [with _Value = std::ios_base&(std::ios_base&); _Iterator = __gnu_cxx::__normal_iterator<long long int*, std::vector<long long int> >]':
/usr/include/c++/14/bits/stl_algo.h:1993:14:   required from '_ForwardIterator std::__upper_bound(_ForwardIterator, _ForwardIterator, const _Tp&, _Compare) [with _ForwardIterator = __gnu_cxx::__normal_iterator<long long int*, vector<long long int> >; _Tp = ios_base&(ios_base&); _Compare = __gnu_cxx::__ops::_Val_less_iter]'
 1993 |           if (__comp(__val, __middle))
      |               ~~~~~~^~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/stl_algo.h:2028:32:   required from '_FIter std::upper_bound(_FIter, _FIter, const _Tp&) [with _FIter = __gnu_cxx::__normal_iterator<long long int*, vector<long long int> >; _Tp = ios_base&(ios_base&)]'
 2028 |       return std::__upper_bound(__first, __last, __val,
      |              ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
 2029 |                                 __gnu_cxx::__ops::__val_less_iter());
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
a.cc:98:28:   required from here
   98 |                         ll rightID = upper_bound(all(X), right) - X.begin();
      |                                      ~~~~~~~~~~~^~~~~~~~~~~~~~~
/usr/include/c++/14/bits/predefined_ops.h:98:22: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
   98 |       { return __val < *__it; }
      |                ~~~~~~^~~~~~~