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)