(60pts)
#include <bits/stdc++.h>
using namespace std;
deque<int>q;
long long x[500005],s[500005],f[500005],us[500005];
int n,d,k;
void pu(int a)
{
while(q.size()!=0&&f[a]>f[q.back()])
us[q.back()]=0,q.pop_back();
us[a]=1;
q.push_back(a);
}
int check(int g)
{
memset(f,0,sizeof(f));
memset(us,0,sizeof(us));
while(q.size()!=0)
q.pop_front();
int num=0;
for(int i=1;i<=n;i++)
{
while(q.size()!=0&&x[i]-x[q.front()]>d+g)
us[q.front()]=0,q.pop_front();
while(x[i]-x[num]>=max(d-g,1)&&x[i]-x[num]<=d+g)
{
pu(num);
num++;
}
if(q.size()==0)
f[i]=-1;
else
{
int t=q.front();
if(f[t]==-1)
{
q.pop_front();
continue;
}
if(f[t]+s[i]>=k)
return 1;
f[i]=f[t]+s[i];
}
}
return 0;
}
int main()
{
cin>>n>>d>>k;
for(int i=1;i<=n;i++)
cin>>x[i]>>s[i];
int l=0,r=x[n];
while(l<r)
{
int mid=(l+r)/2;
if(check(mid)==1)
r=mid;
else
l=mid+1;
}
if(check(l)==1)
cout<<l;
else
cout<<-1;
}