样例一输出 20
#include <bits/stdc++.h>
long long N, D, K, G, dis[514514], val[514514], dp[514514], sum, l, r, m;
bool check(long long x) {
std::deque <long long> dq;
long long j = 0, lpos = std::max(1LL, D - G), rpos = D + G;
for (long long i = 0; i <= N; i ++) dp[i] = i != 0 ? -1145141919 : 0;
for (long long i = 1; i <= N; i ++) {
for (; j < i && dis[i] - dis[j] >= lpos; dq.push_back(j), j ++)
while (!dq.empty() && dp[j] >= dp[dq.back()]) dq.pop_back();
while (!dq.empty() && dis[i] - dis[dq.front()] > rpos) dq.pop_front();
if (!dq.empty()) dp[i] = dp[dq.front()] + val[i];
if (dp[i] >= K) return true;
}
return false;
}
signed main() {
std::cin >> N >> D >> K;
for (long long i = 1; i <= N; i ++) std::cin >> dis[i] >> val[i];
for (long long i = 1; i <= N; i ++) sum += val[i] > 0 ? val[i] : 0;
if (sum < K) std::cout << "-1", exit(0);
for (l = 1, r = dis[N]; l + 1 < r; (check(m) ? r : l) = m) m = (l + r) / 2;
std::cout << r, exit(0);
}