#include <algorithm>
#include <any>
#include <iostream>
using namespace std;

int main() {
    int n, C, m;
    cin >> n >> C >> m;
    int costs[1001] = {};
    long long fightings[1001] = {};
    int connections[1001] = {};
    int unionfights[1001] = {};
    for (int i = 1; i <= n; i++) {
        cin >> costs[i] >> fightings[i];
    }
    int u, v, w;
    for (int i = 1; i <= m ; i++) {
        cin >> u >> v >> w;
        if(u > v){
            swap(u, v);
        }
        connections[u] = v;
        unionfights[u] = w;
    }

    long long dp[5][1001] = {};
    for (int i = 1; i <= n; i++) {
        int k = connections[i];
        for (int p = 4; p > 0; p--) {
            if (k == 0) {
                for (int j = C; j >= costs[i]; j--) {
                    dp[p][j] = max(dp[p][j], dp[p - 1][j - costs[i]] + fightings[i]);
                }
            } else if (k > i) {
                int low_bound = min(costs[i], costs[k]);
                for (int j = C; j >= low_bound; j--) {
                    if (j - costs[i] >= 0) {
                        dp[p][j] = max(dp[p][j], dp[p - 1][j - costs[i]] + fightings[i]);
                    }
                    if (j - costs[k] >= 0) {
                        dp[p][j] = max(dp[p][j], dp[p - 1][j - costs[k]] + fightings[k]);
                    }
                    if (j - costs[i] - costs[k] >= 0 && p >= 2) {
                        dp[p][j] = max(dp[p][j], dp[p - 2][j - costs[i] - costs[k]] + fightings[i] + fightings[k] +
                                    unionfights[i]);
                    }
                }
            }
        }
    }
    long long ans = 0;
    for(int i = 0; i < 5; i++) {
        if(ans < dp[i][C]) {
            ans = dp[i][C];
        }
    }
    cout << ans;
}
// 64 位输出请用 printf("%lld")