rt 捞
#include<bits/stdc++.h>
using namespace std;
#define int long long
namespace FastIO
{
const int Mt = 1e5;
inline char getch()
{
static char buf[Mt],*p1 = buf,*p2 = buf;
return p1 == p2 && (p2 = (p1 = buf) + fread(buf,1,Mt,stdin),p1 == p2) ? EOF : *p1++;
}
inline int input()
{
int num = 0,f = 1;
char ch = getch();
while(ch < '0' || ch > '9')
{
if(ch == '-') f = -1;
ch = getch();
}
while(ch >= '0' && ch <= '9')
{
num = (num << 1) + (num << 3) + (ch ^ 48);
ch = getch();
}
return num * f;
}
inline void printNum(int num)
{
if(num >= 10) printNum(num / 10);
putchar(num % 10 + 48);
}
inline void print(int num,char ch = ' ')
{
if(num < 0) putchar('-'),num = -num;
printNum(num);
putchar(ch);
}
}
using FastIO::input;
using FastIO::print;
const int INF = -1u / 2;
const int N = 5e5 + 5;
int n,d,low;
int x[N],s[N],dp[N];
void p()
{
for(int i = 1;i <= n;i++)
print(dp[i]);
puts("");
}
bool check(int g)
{
deque <int> dq;
int il = max(1LL,d - g),ir = d + g,pos = 0;
// print(il),print(ir),print(g,'\n');
for(int i = 0;i <= n;i++) dp[i] = 0;
// memset(dp,0,sizeof dp);
for(int i = 1;i <= n;i++)
{
// int lb = x[i] - ir,rb = x[i] - il;
// if(rb < lb) continue;
// for(int k = (lower_bound(x,x+1+n,lb) - x);x[k] <= rb;k++)
// {
// dp[i] = max(dp[i],dp[k] + s[i]);
// if(dp[i] >= low) {/*p()*/;return true;}
// }
while(pos < i && x[i] - x[pos] >= il)
{
while(!dq.empty() && dp[pos] >= dp[dq.back()])
dq.pop_back();
dq.push_back(pos);
pos++;
}
while(!dq.empty() && x[i] - x[dq.front()] > ir)
dq.pop_front();
if(dq.size()) dp[i] = dp[dq.front()] + s[i];
else dp[i] = -INF;
if(dp[i] >= low) return true;
}
// p();
// print(dp[n],'\n');
return false;
}
signed main()
{
freopen("C:/Users/Administrator/Downloads/P3957_10.in","r",stdin);
n = input(),d = input(),low = input();
for(int i = 1;i <= n;i++)
x[i] = input(),s[i] = input();
int l = 1,r = x[n],mid;
while(l < r)
{
mid = (l + r >> 1);
if(check(mid)) r = mid;
else l = mid + 1;
}
print(check(l) ? l : -1);
// print(l);
}