#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
const int N = 1e6 + 100;
long long t[N << 2], col[N << 2];
void down(int pos) {
  if (!col[pos]) return;
  t[pos << 1] += col[pos];
  col[pos << 1] += col[pos];
  t[pos << 1 | 1] += col[pos];
  col[pos << 1 | 1] += col[pos];
  col[pos] = 0;
}
void update(int L, int R, int v, int l, int r, int pos) {
  if (L <= l && r <= R) {
    col[pos] += v;
    t[pos] += v;
    return;
  }
  down(pos);
  int m = l + r >> 1;
  if (L <= m) update(L, R, v, l, m, pos << 1);
  if (R > m) update(L, R, v, m + 1, r, pos << 1 | 1);
  t[pos] = max(t[pos << 1], t[pos << 1 | 1]);
}
struct node {
  long long x, y, z;
} s[N];
struct A {
  long long a, cost;
} a[N];
struct D {
  long long d, cost;
} d[N];
int T = 1e6;
int main() {
  int n, m, p;
  cin >> n >> m >> p;
  for (int i = 1; i <= n; i++) {
    scanf("%lld%lld", &a[i].a, &a[i].cost);
  }
  for (int i = 1; i <= m; i++) {
    scanf("%lld%lld", &d[i].d, &d[i].cost);
  }
  sort(a + 1, a + 1 + n,
       [&](A a, A b) { return a.a < b.a || a.a == b.a && a.cost > b.cost; });
  int cnt1 = 0;
  for (int i = 1; i <= n; i++) {
    while (cnt1 >= 1 && a[i].cost <= a[cnt1].cost) cnt1--;
    a[++cnt1] = a[i];
  }
  sort(d + 1, d + 1 + m,
       [&](D a, D b) { return a.d < b.d || a.d == b.d && a.cost > b.cost; });
  int cnt2 = 0;
  for (int i = 1; i <= m; i++) {
    while (cnt2 >= 1 && d[i].cost <= d[cnt2].cost) cnt2--;
    d[++cnt2] = d[i];
  }
  long long ans = 0;
  for (int i = 1; i <= p; i++) {
    scanf("%lld%lld%lld", &s[i].x, &s[i].y, &s[i].z);
  }
  sort(s + 1, s + 1 + p, [](node a, node b) { return a.x < b.x; });
  for (int i = 1; i <= cnt2; i++) {
    update(d[i - 1].d, d[i].d - 1, -d[i].cost, 0, T, 1);
  }
  update(d[cnt2].d, T, -1e12, 0, T, 1);
  long long maxx = -a[1].cost - d[1].cost;
  for (int i = 1; i <= p; i++) {
    int L = 1, R = cnt1, ans = -1;
    while (L <= R) {
      int mid = L + R >> 1;
      if (s[i].x < a[mid].a)
        ans = mid, R = mid - 1;
      else
        L = mid + 1;
    }
    if (ans == -1) break;
    long long tempans = a[ans].cost;
    update(s[i].y, T, s[i].z, 0, T, 1);
    maxx = max(maxx, -tempans + t[1]);
  }
  cout << maxx;
}
