N, A, B = map(int, input().split()) XY = [tuple(map(int, input().split())) for _ in range(N)] # (個数, 攻撃) # (-攻撃, -個数) #dp = [[SortedList(key=lambda x: (-x[1], -x[0])) for _ in range(A + 1)] for _ in range(N)] dp = [[[] for _ in range(A + 1)] for _ in range(N)] dp[0][0].append((0, 0)) if XY[0][0] <= A: dp[0][XY[0][0]].append((1, XY[0][1])) for i in range(1, N): for j in range(A+1): min_attack = 10**12 dp[i-1][j].sort(key=lambda x: (-x[1], -x[0])) for a in dp[i-1][j]: if a[1]+XY[i][1] >= min_attack: continue min_attack = a[1]+XY[i][1] if j+XY[i][0] <= A: dp[i][j+XY[i][0]].append((a[0]+1, a[1]+XY[i][1])) dp[i][j].append(a) ans = 0 for a in dp[-1]: if a and a[0][0] > ans: ans = a[0][0] print(ans)