import java.util.*;public class Main {public static void main(String[] args) {Scanner input = new Scanner(System.in);int N = 100100; // 定义一个较大的常数Nlong[] t = new long[N]; // 存储任务的耗时long[] c = new long[N]; // 存储每块区域投入资源的数量long[] cc = new long[N]; // 存储每块区域开垦耗时long maxn = 0; // 最大的区域耗时// 输入区域数量n,初始资源数m,目标最少开垦天数klong 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;}}} }