""" """ N,M,Q = map(int,input().split()) A = [] B = [] for i in range(N): a,b = map(int,input().split()) A.append(a) B.append(b) # dpM[s] = 集合sの部分集合において、M円で購入できる最高の価値 # を高速ゼータ変換で計算する dpM = [0] * (2**N) for bit in range(2**N): asum = 0 bsum = 0 for i in range(N): if 2**i & bit: asum += A[i] bsum += B[i] if asum <= M: dpM[bit] = bsum #高速ゼータ変換 for bit in range(2**N): for i in range(N): if 2**i | bit != bit: dpM[2**i | bit] = max(dpM[2**i | bit] , dpM[bit]) # 同様にdpQも計算する # dpQ[s] = 集合sの部分集合において、Q円で購入できる最高の価値 dpQ = [0] * (2**N) for bit in range(2**N): asum = 0 bsum = 0 for i in range(N): if 2**i & bit: asum += A[i] bsum += B[i] if asum <= Q: dpQ[bit] = bsum #高速ゼータ変換 for bit in range(2**N): for i in range(N): if 2**i | bit != bit: dpQ[2**i | bit] = max(dpQ[2**i | bit] , dpQ[bit]) # 答を計算 ans = 0 for bit in range(2**N): rembit = (2**N-1) ^ bit ans = max(ans , dpM[bit] + dpQ[rembit]) print (ans)