#include<bits/stdc++.h>
using namespace std;
int n,d,k;
struct node{
int dis;
int v;
}m[1000005];
int x,y,flag=0;
deque <int> q;
int f[1000005];
int check(int g){
int left=max(1,d-g);
int right=d+g;
f[0]=0;
for(int i=1;i<=n;i++){
f[i]=-1e9;
}
while(!q.empty()) q.pop_back();
int point=0;
for(int i=1;i<=n;i++){
while(m[i].dis-m[point].dis>=left)
{ if(q.empty()){
q.push_back(point);
point++;
continue;
}
while(!q.empty()&&f[q.back()]<=f[point]){
q.pop_back();
}
q.push_back(point);
point++;
}
if(!q.empty()){
while(m[q.front()].dis+right<m[i].dis||m[q.front()].dis+left>m[i].dis){
q.pop_front();
if(q.empty()) break;
}
}
if(q.empty()) f[i]=-1e9;
else f[i]=max(m[i].v+f[q.front()],f[i]);
if(f[i]>k){ flag=1;return 1;}
}
return 0;
}
int main(){
cin>>n>>d>>k;
for(int i=1;i<=n;i++){
cin>>x>>y;
m[i].v=y;
m[i].dis=x;
}
int l=0,r=m[n].dis,mid;
while(l<r){
mid=(l+r)/2;
if(check(mid)){
r=mid;
}else{
l=mid+1;
}
}
if(flag) cout<<l;
else cout<<"-1"<<endl;
}