#include <bits/stdc++.h>
#define N 5000000
#define INF 1145141919810
#define int1 long long
using namespace std;
int1 n,d,k,l,r,mid,i,x[N + 5],s[N + 5],dp[N + 5],q[N + 5],head,tail,sum;
int1 read(){
int1 x = 0,f = 1;
char ch = getchar();
while(!isdigit(ch)){
if(ch == '-'){
f = -1;
}
ch = getchar();
}
while(isdigit(ch)){
x = (x << 1) + (x << 3) + (ch ^ '0');
ch = getchar();
}
return x * f;
}
char getc(int1 x){
char ch = getchar();
while(!(((x & 1) && ch >= '0' && ch <= '9') || ((x & 2) && ch >= 'a' && ch <= 'z') ||
((x & 4) && ch >= 'A' && ch <= 'Z') || ((x & 8) && ch != ' ' && ch != '\n' && ch != '\0') || ((x & 16) && ch != '\n' && ch != '\0'))){
ch = getchar();
}
return ch;
}
void uprint(int1 x){
if(x > 9){
uprint(x / 10);
}
putchar(x % 10 ^ 48);
return ;
}
void print(int1 x){
if(x < 0){
putchar('-');
x = -x;
}
uprint(x);
return ;
}
void ps(int1 x){
print(x);
putchar(' ');
return ;
}
void pe(int1 x){
print(x);
putchar('\n');
return ;
}
bool check(){
tail = 1,head = 1,q[head] = 0;
int1 maxn = -INF;
for(int1 i = 1,j = 1; i <= n; i++){
dp[i] = -INF;
int1 l = lower_bound(x,x + n + 1,x[i] - d - mid) - x,r = min(i,(int1)(upper_bound(x,x + n + 1,x[i] - d + mid) - x)) - 1;
if(l <= r){
while(head <= tail && q[head] < l){
head++;
}
for(; j <= r; j++){
while(head <= tail && dp[j] >= dp[q[tail]]){
tail--;
}
q[++tail] = j;
}
}
if(head <= tail){
dp[i] = dp[q[head]] + s[i];
}
maxn = max(maxn,dp[i]);
}
return (maxn >= k);
}
int main(){
n = read(),d = read(),k = read();
for(i = 1; i <= n; i++){
x[i] = read(),s[i] = read();
if(s[i] > 0){
sum += s[i];
}
}
if(sum < k){
pe(-1);
return 0;
}
l = 0,r = x[n];
while(l < r){
mid = (l + r) >> 1;
if(check()){
r = mid;
}else{
l = mid + 1;
}
}
pe(r);
return 0;
}