import sys from functools import cmp_to_key def main(): input = sys.stdin.read().split() idx = 0 N = int(input[idx]); idx +=1 V = int(input[idx]); idx +=1 C = int(input[idx]); idx +=1 items = [] for _ in range(N): v = int(input[idx]); idx +=1 w = int(input[idx]); idx +=1 items.append((v, w)) # Sort by v ascending, then by efficiency descending for same v def compare_v(a, b): v_a, w_a = a v_b, w_b = b if v_a != v_b: return -1 if v_a < v_b else 1 else: # Compare efficiency (w/v) descending lhs = w_a * v_b rhs = w_b * v_a return -1 if lhs > rhs else 1 if lhs < rhs else 0 items_sorted = sorted(items, key=cmp_to_key(compare_v)) v_sorted = [x[0] for x in items_sorted] w_sorted = [x[1] for x in items_sorted] # Compute prefix sums for v and w prefix_sum_v = [0] * (N + 1) prefix_sum_w = [0] * (N + 1) for i in range(N): prefix_sum_v[i+1] = prefix_sum_v[i] + v_sorted[i] prefix_sum_w[i+1] = prefix_sum_w[i] + w_sorted[i] max_total = 0 for k in range(1, N+1): sum_v = prefix_sum_v[k] if sum_v > V: continue sum_w = prefix_sum_w[k] remaining = V - sum_v # Sort the selected k items by efficiency descending selected = items_sorted[:k] def compare_efficiency(a, b): v_a, w_a = a v_b, w_b = b lhs = w_a * v_b rhs = w_b * v_a return -1 if lhs > rhs else 1 if lhs < rhs else 0 selected_sorted = sorted(selected, key=cmp_to_key(compare_efficiency)) add_w = 0 R = remaining for item in selected_sorted: vi, wi = item if R <= 0: break m = R // vi add_w += m * wi R -= m * vi total = sum_w + add_w + k * C if total > max_total: max_total = total print(max_total) if __name__ == '__main__': main()