import sys input = sys.stdin.readline n, C, m = map(int, input().split()) heroes = [tuple(map(int, input().split())) for _ in range(n)] paired = set() pair_info = [] for _ in range(m): u, v, bonus = map(int, input().split()) u -= 1 v -= 1 pair_info.append((u, v, bonus)) paired.add(u) paired.add(v) # 单人英雄索引 singles = [i for i in range(n) if i not in paired] # dp[k][c] = 选k人,总cost为c的最大战斗力,初始-1表示不可达 dp = [[-1] * (C + 1) for _ in range(5)] dp[0][0] = 0 max_ans = 0 # 实时维护最大值 # --- 处理单人英雄 --- for idx in singles: cost, power = heroes[idx] for k in range(3, -1, -1): for c in range(C - cost, -1, -1): if dp[k][c] != -1: new_val = dp[k][c] + power if new_val > dp[k + 1][c + cost]: dp[k + 1][c + cost] = new_val if new_val > max_ans: max_ans = new_val # --- 处理双生组合英雄 --- for u, v, bonus in pair_info: cu, pu = heroes[u] cv, pv = heroes[v] combos = [] if cu <= C: combos.append((1, cu, pu)) if cv <= C: combos.append((1, cv, pv)) if cu + cv <= C: combos.append((2, cu + cv, pu + pv + bonus)) dp_old = [row[:] for row in dp] for people, cost, power in combos: max_k = 4 - people for k in range(max_k, -1, -1): for c in range(C - cost, -1, -1): if dp_old[k][c] != -1: new_val = dp_old[k][c] + power if new_val > dp[k + people][c + cost]: dp[k + people][c + cost] = new_val if new_val > max_ans: max_ans = new_val # --- 输出最大值 --- print(max_ans)