#include<bits/stdc++.h>
using namespace std;
int n,d,k,q[500005],head=1,tail,maxs;
long long dp[500005];
struct oo
{
int s;
long long fs;
}a[500005];
bool check(int o)
{
int l=max(d-o,1),r=d+o,pre=0;
long long ret=0;
memset(dp,128,sizeof(dp));
dp[0]=0;
for(int i=1;i<=n;i++)
{
if(a[i].s<l) continue;
while((a[i].s-a[q[head]].s>r||a[i].s-a[q[head]].s<l) && head<=tail) head++;
while(a[i].s-a[pre].s>=l&&pre<i)
{
while(a[q[tail]].fs<=dp[pre] && head<=tail) tail--;
q[++tail]=pre;
pre++;
}
dp[i]=dp[q[head]]+a[i].fs;
ret=max(ret,dp[i]);
if(ret>=k) return 1;
}
return 0;
}
int main()
{
scanf("%d%d%d",&n,&d,&k);
int sum=0;
for(int i=1;i<=n;i++)
{
scanf("%d%lld",&a[i].s,&a[i].fs);
maxs=max(a[i].s,maxs);
sum+=max(a[i].fs,(long long)0);
}
if(sum<k)
{
printf("-1");
return 0;
}
int l=0,r=max(maxs,d);
while(l<r)
{
head=1,tail=0;
memset(q,0,sizeof(q));
int mid=(l+r)>>1;
if(check(mid)) r=mid;
else l=mid+1;
}
printf("%d",r);
return 0;
}