#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")