#include <bits/stdc++.h>
using namespace std;
const long long MAXN = 5e5+5;
const long long INF = 0x3f3f3f3f;
long long n, d, k ,ans = -1;
long long a[MAXN], x[MAXN];
long long q[MAXN], F[MAXN];
long long read(){
long long x = 0, f = 1;
char c = getchar();
while (c<'0' || c>'9'){if (c=='-')f=-1; c = getchar();}
while (c>='0'&& c<='9'){x = x*10+(c-'0'); c = getchar();}
return x*f;
}
bool check(long long mid){
long long S = max(d-mid, (long long)1);
long long T = min(d+mid, x[n]);
for (long long i=1;i<=n;i++) F[i] = -INF, q[i] = 0;
F[0] = 0;
long long f = 1, r = 0;
for (long long i=1;i<=n;i++){
long long idx = q[r]+1;
while ((x[i]-x[idx]) >= S && idx < i){
while (f<=r && F[q[r]] < F[idx]) r--;
q[++r] = idx++;
}
while (f<=r && (x[i]-x[q[f]]) > T) f++;
if (x[i] >= S && x[i] <= T) F[i] = a[i];
if (f <= r){
F[i] = max(F[q[f]]+a[i], F[i]);
}
if (F[i] >= k) return 1;
}
return 0;
}
int main(){
n = read(), d = read(), k = read();
for (long long i=1;i<=n;i++){x[i] = read(); a[i] = read();}
long long L = 1, R = x[n], mid;
while (L <= R){
mid = (L+R) / 2;
if (check(mid)){
ans = mid;
R = mid-1;
}
else L = mid+1;
}
cout << ans;
return 0;
}