#include<bits/stdc++.h>
using namespace std;
struct Node{
int x,s;
long long dp;
}a[500001];
deque <Node> q;
int main(){
int n,d,k;
scanf("%d%d%d",&n,&d,&k);
long long js=0;
for(int i=1;i<=n;i++){
scanf("%d%d",&a[i].x,&a[i].s);
js+=max(a[i].s,0);
}
if(js<k){
printf("-1");
return 0;
}
int l=0,r=a[n].x,mid,ans=0;
while(l<=r){
mid=l+r>>1;
while(!q.empty()){
q.pop_back();
}
for(int i=1;i<=n;i++){
while(!q.empty()&&q.front().x<min(a[i].x-d-mid,1)){
q.pop_front();
}
if(!q.empty()){
a[i].dp=q.back().dp+a[i].s;
js=max(a[i].dp,js);
}
while(a[i].dp>=0&&q.front().dp<=a[i].dp){
q.pop_back();
}
q.push_back(a[i]);
}
if(ans>=k){
r=mid-1;
ans=mid;
}
else{
l=mid+1;
ans=mid;
}
}
printf("%d",ans);
return 0;
}