
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;
            }
        }
    }
}
                


















