#include <bits/stdc++.h>
using namespace std;
#define int long long
constexpr int MAXN = 500005, INF = 1000000000000000010ll;
struct P{
int x, s;
}a[MAXN];
int dp[MAXN];
int n, d, k;
bool check(int g){
memset(dp, 0, sizeof(dp));
int i{1}, j{};
for(;i <= n && a[i].x <d - g;i++)dp[i] = -INF;
deque<int> q;
int ans{-INF};
for(;i<=n;i++){
while(a[j].x + g + d < a[i].x)j++;
while(!q.empty() && a[q.front()].x + d + g < a[i].x)q.pop_front();
while(j < i && a[j].x + max(1ll, d - g) <= a[i].x){
while(!q.empty() && dp[q.back()] < dp[j])q.pop_back();
q.push_back(j);
j++;
}
if(q.empty())return ans >= k;
dp[i] = a[i].s + dp[q.front()];
ans = max(ans, dp[i]);
}
return ans >= k;
}
signed main(){
cin >> n >> d >> k;
for(int i{1};i<=n;i++){
cin >> a[i].x >> a[i].s;
}
int l{}, r{1000000000}, ans{-1};
while(l <= r){
int mid = (l + r) >> 1;
if(check(mid)){
ans = mid;
r = mid - 1;
}else{
l = mid + 1;
}
}
cout << ans;
}