#include <bits/stdc++.h>
using namespace std;
const int N = 500007;
int dis[N], num[N], f[N], que[N];
int n, d, k, l, r, ans = 0;
int check(int val)
{
memset(f, -127, sizeof(f));
int head = 1, tail = 0, mi = val < d ? d - val : 1, mx = d + val, ret = 0, fir = -1;
que[++tail] = 0, f[0] = 0;
for (int i = 1; i <= n; i++)
{
if (dis[i] < mi) continue;
if (dis[i] >= mi && fir == -1)
fir = i;
if (dis[i] - dis[i - 1] > mx) break;
while (dis[i] - dis[fir] >= mi && fir < i)
{
while (head <= tail && f[fir] > f[que[tail]]) tail--;
que[++tail] = fir++;
}
while (head <= tail && dis[que[head]] + mx < dis[i]) head++;
if (head > tail)
f[i] = -0x7f7f7f7f;
else
f[i] = f[que[head]] + num[i];
if (f[i] > ret)
ret = f[i];
}
return ret >= k;
}
int main()
{
cin>>n>>d>>k;
for (int i = 1; i <= n; i++)
cin>>dis[i]>>num[i];
l = 0, r = dis[n];
while (l <= r)
{
int mid = (l + r) / 2;
if (check(mid))
r = mid - 1, ans = mid;
else
l = mid + 1;
}
if (check(ans))
cout << ans;
else
cout << -1;
return 0;
}