#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
using LL = long long;
constexpr int MAXN = 2e5 + 10, MAXC = 1e6;
constexpr LL INF = 1e15;
struct node {
  LL mn, tag_add;
} ST[MAXC * 4 + 200];
void modify_add(int l, int r, int o, int ql, int qr, LL v) {
  if (ql == l && qr == r) {
    ST[o].tag_add += v;
  } else {
    int m = (l + r) / 2;
    if (ql < m) modify_add(l, m, o * 2, ql, min(qr, m), v);
    if (qr > m) modify_add(m, r, o * 2 + 1, max(m, ql), qr, v);
    ST[o].mn = min(ST[o * 2].mn + ST[o * 2].tag_add,
                   ST[o * 2 + 1].mn + ST[o * 2 + 1].tag_add);
  }
}
LL query_min(int l, int r, int o, int ql, int qr) {
  if (ql == l && qr == r) {
    return ST[o].mn + ST[o].tag_add;
  } else {
    int m = (l + r) / 2;
    LL v = INF;
    if (ql < m) v = min(v, query_min(l, m, o * 2, ql, min(qr, m)));
    if (qr > m) v = min(v, query_min(m, r, o * 2 + 1, max(m, ql), qr));
    return v + ST[o].tag_add;
  }
}
int n, m, p;
LL b[MAXC + 1];
pair<int, int> a[MAXN];
tuple<int, int, int> c[MAXN];
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cin >> n >> m >> p;
  for (int i = 0; i < n; i++) cin >> a[i].first >> a[i].second;
  fill_n(b, MAXC + 1, INF);
  for (int i = 0; i < m; i++) {
    LL bj, cbj;
    cin >> bj >> cbj;
    b[bj] = min(b[bj], cbj);
  }
  for (int i = 0; i <= MAXC; i++) {
    modify_add(0, MAXC + 1, 1, i, i + 1, b[i]);
  }
  for (int i = 0; i < p; i++)
    cin >> get<0>(c[i]) >> get<1>(c[i]) >> get<2>(c[i]);
  sort(a, a + n);
  sort(c, c + p);
  LL ans = INF;
  for (int i = 0, j = 0; i < n; i++) {
    while (j < p && get<0>(c[j]) < a[i].first) {
      int x = get<1>(c[j]);
      if (x < MAXC) modify_add(0, MAXC + 1, 1, x + 1, MAXC + 1, -get<2>(c[j]));
      j++;
    }
    ans = min(ans, a[i].second + query_min(0, MAXC + 1, 1, 0, MAXC + 1));
  }
  cout << -ans << '\n';
  return 0;
}
