#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
const long long INF = 0x3f3f3f3f3f3f3f3f;
const long long llinf = (1LL << 62);
const int inf = (1 << 30);
const int nmax = 1e6 + 50;
const int mod = 1e9 + 7;
const int lim = 1e6 + 5;
using namespace std;
long long n, m, p, pw[nmax], df[nmax], st[4 * nmax], lzy[4 * nmax], rs = -llinf,
                                                                    i, j, x, y;
pair<long long, pair<long long, long long> > a[nmax];
void build(int x, int l, int r) {
  if (l == r) {
    st[x] = -df[l];
    return;
  }
  int mid = (l + r) / 2;
  build(2 * x, l, mid);
  build(2 * x + 1, mid + 1, r);
  st[x] = max(st[2 * x], st[2 * x + 1]);
}
void push(int nod, int l, int r) {
  if (!lzy[nod]) return;
  st[nod] += lzy[nod];
  if (l != r) {
    lzy[nod * 2] += lzy[nod];
    lzy[nod * 2 + 1] += lzy[nod];
  }
  lzy[nod] = 0;
}
void upd(int nod, int l, int r, int tl, int tr, long long v) {
  push(nod, l, r);
  if (tl <= l && r <= tr) {
    lzy[nod] += v;
    push(nod, l, r);
    return;
  }
  int mid = (l + r) / 2;
  if (tl <= mid) upd(nod * 2, l, mid, tl, tr, v);
  if (mid < tr) upd(nod * 2 + 1, mid + 1, r, tl, tr, v);
  push(nod * 2, l, mid);
  push(nod * 2 + 1, mid + 1, r);
  st[nod] = max(st[nod * 2], st[nod * 2 + 1]);
}
long long qry(int nod, int l, int r, int tl, int tr) {
  if (l > tr || r < tl) return -llinf;
  push(nod, l, r);
  if (tl <= l && r <= tr) return st[nod];
  int mid = (l + r) / 2;
  return max(qry(nod * 2, l, mid, tl, tr),
             qry(2 * nod + 1, mid + 1, r, tl, tr));
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cerr.tie(0);
  cout.tie(0);
  cin >> n >> m >> p;
  for (i = 1; i <= lim; i++) pw[i] = df[i] = llinf;
  for (i = 1; i <= n; i++) {
    cin >> x >> y;
    pw[x] = min(pw[x], y);
  }
  for (i = 1; i <= m; i++) {
    cin >> x >> y;
    df[x] = min(df[x], y);
  }
  for (i = lim - 1; i >= 1; i--) {
    pw[i] = min(pw[i], pw[i + 1]);
    df[i] = min(df[i], df[i + 1]);
  }
  build(1, 1, lim);
  for (i = 1; i <= p; i++) {
    cin >> a[i].first >> a[i].second.first >> a[i].second.second;
  }
  sort(a + 1, a + p + 1);
  for (i = 1; i <= p; i++) {
    if (pw[a[i].first + 1] == llinf) break;
    for (j = i; j <= p; j++) {
      if (a[j].first != a[i].first) break;
      upd(1, 1, lim, a[j].second.first + 1, lim, a[j].second.second);
    }
    rs = max(rs, -pw[a[i].first + 1] + qry(1, 1, lim, 1, lim));
    i = j - 1;
  }
  rs = max(rs, -pw[1] - df[1]);
  cout << rs << endl;
  return 0;
}
