#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N=5e5+5;
const ll INF=0x8080808080808080;
int n,d,k,l,r,ans=-1;
int q[N];
ll sum,dp[N];
struct node{
int x,s;
}c[N];
ll f(int le,int ri)
{
memset(dp,0x80,sizeof(dp));
dp[0]=0;
memset(q,0,sizeof(q));
int hh=1,tt=0,j=0;
for(int i=1;i<=n;i++)
{
while(c[i].x-c[j].x>=le && j<i)
{
if(dp[j]!=INF)
{
while(hh<=tt && dp[q[tt]]<=dp[j])
tt--;
q[++tt]=j;
}
j++;
}
while(hh<=tt && c[i].x-c[q[hh]].x>ri)
hh++;
if(hh<=tt)
dp[i]=dp[q[hh]]+c[i].s;
}
ll num=INF;
// for(int i=1;i<=n;i++)
// num=max(num,dp[i]);
for(int i=1;i<=n;i++)
{
if(dp[i]>num)
num=dp[i];
}
return num;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>d>>k;
for(int i=1;i<=n;i++)
{
cin>>c[i].x>>c[i].s;
if(c[i].s>0);
sum+=c[i].s;
}
r=max(d,c[n].x);
if(sum<k)
{
cout<<-1;
return 0;
}
while(l<=r)
{
int mid=(l+r)/2;
int lb=max(1,d-mid),rb=d+mid;
ll p=f(lb,rb);
if(p<k)
l=mid+1;
else
{
ans=mid;
r=mid-1;
}
}
cout<<ans;
return 0;
}