import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int N = 100100; // 定义一个较大的常数N
long[] t = new long[N]; // 存储任务的耗时
long[] c = new long[N]; // 存储每块区域投入资源的数量
long[] cc = new long[N]; // 存储每块区域开垦耗时
long maxn = 0; // 最大的区域耗时
// 输入区域数量n,初始资源数m,目标最少开垦天数k
long n = input.nextLong();
long m = input.nextLong();
long k = input.nextLong();
// 输入每块区域的耗时和将耗时缩短到k天所需资源数量
for (int i = 0; i < n; i++) {
t[i] = input.nextLong(); // 区域的初始耗时
c[i] = input.nextLong(); // 区域的资源数量
cc[(int) t[i]] += c[i]; // 将资源数量累加到对应区域的开垦耗时上
maxn = Math.max(maxn, t[i]); // 更新最大的区域耗时
}
// 从最大的区域耗时开始向前遍历,处理资源数量
for (long i = maxn; i >= k; i--) {
// 如果当前区域的开垦耗时大于初始资源m,则需要向前投入资源
if (m > cc[(int) i]) {
// 如果当前区域的耗时已经是目标最少开垦天数k,则输出k并结束循环
if (i == k) {
System.out.println(k);
break;
}
// 否则,将当前区域的开垦耗时减去初始资源m,并加到前一个区域的开垦耗时上
m -= cc[(int) i];
cc[(int) (i - 1)] += cc[(int) i];
} else {
// 如果当前区域的开垦耗时小于等于初始资源m,则直接输出当前区域耗时并结束循环
System.out.println(i);
break;
}
}
}
}