#include<bits/stdc++.h>
using namespace std;
const int N = 5e5 + 5;
int n, d, k, lft, rgt, mid, ans, f[N], mindis, maxdis;
struct node{
int x, s;
}a[N];
bool check(int g){
mindis = max(1, d - g);
maxdis = d + g;
memset(f, -127, sizeof(f));
f[0] = 0;
for(int i = 1; i <= n; i++){
for(int j = i - 1; j >= 0; j--){
if(a[i].x - a[j].x < mindis) continue;
if(a[i].x - a[j].x > maxdis) break;
f[i] = max(f[i], f[j] + a[i].s);
if(f[i] >= k) return 1;
}
}
return 0;
}
int main(){
cin >> n >> d >> k;
for(int i = 1; i <= n; i++){
cin >> a[i].x >> a[i].s;
}
rgt = min(a[n].x, 1005);
while(lft <= rgt){
mid = (lft + rgt) / 2;
if(check(mid)){
ans = mid;
rgt = mid - 1;
}else{
lft = mid + 1;
}
}
cout << ans << endl;
return 0;
}