#include<bits/stdc++.h>
using namespace std;
const int mx=5e5+5;
int l=1,r=mx*2,d,n,k,juli[mx],sum[mx],dp[mx];
bool check(int g){
int minn=max(1,d-g);
int maxx=d+g;
memset(dp,-1,sizeof(dp));
dp[0]=0;
for(int i=1;i<=n;i++){
for(int j=0;j<=i-1;j++){
if(juli[i]>=juli[j]+minn&&juli[i]<=juli[j]+maxx){
dp[i]=max(dp[i],dp[j]+sum[i]);
}
}
if(dp[i]>=k)return true;
}
return false;
}
int main(){
cin>>n>>d>>k;
for(int i=1;i<=n;i++){
cin>>juli[i]>>sum[i];
}
while(l<=r){
int mid=(l+r)/2;
if(check(mid)){
r=mid-1;
}
else{
l=mid+1;
}
}
cout<<l;
return 0;
}
二分+动规