#include <bits/stdc++.h>
using namespace std;
long long tr[4 * 200005], lazy[4 * 200005];
long long n, m, p;
pair<long long, long long> a[200005];
pair<long long, long long> b[200005];
long long bt[200005];
long long mod = 1e16;
struct monster {
  long long a, d, c;
};
monster mon[200005];
bool cmp(monster i, monster j) {
  if (i.d == j.d) {
    return (i.a < j.a);
  }
  return (i.d < j.d);
}
void push(long long ogL, long long ogR, long long si) {
  if (ogL != ogR) {
    lazy[si << 1] += lazy[si];
    lazy[(si << 1) | 1] += lazy[si];
  }
  tr[si] += lazy[si];
  lazy[si] = 0;
}
void update(long long l, long long r, long long val, long long ogL,
            long long ogR, long long si = 1) {
  if (lazy[si]) {
    push(ogL, ogR, si);
  }
  if ((r < ogL) or (l > ogR)) return;
  if ((ogL >= l) && (ogR <= r)) {
    lazy[si] += val;
    push(ogL, ogR, si);
    return;
  }
  long long mid = (ogL + ogR) >> 1;
  update(l, r, val, ogL, mid, si << 1);
  update(l, r, val, mid + 1, ogR, (si << 1) | 1);
  tr[si] = max(tr[si << 1], tr[(si << 1) | 1]);
}
long long query(long long l, long long r, long long ogL, long long ogR,
                long long si = 1) {
  if (lazy[si]) {
    push(ogL, ogR, si);
  }
  if ((r < ogL) or (l > ogR)) return -mod;
  if ((ogL >= l) && (ogR <= r)) {
    return tr[si];
  }
  long long mid = (ogL + ogR) >> 1;
  return max(query(l, r, ogL, mid, (si << 1)),
             query(l, r, mid + 1, ogR, (si << 1) | 1));
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  memset(tr, 0, sizeof(tr));
  memset(lazy, 0, sizeof(lazy));
  cin >> n >> m >> p;
  for (long long i = 0; i < n; i++) {
    cin >> a[i].first >> a[i].second;
  }
  for (long long i = 0; i < m; i++) {
    cin >> b[i].first >> b[i].second;
  }
  sort(a, a + n);
  sort(b, b + m);
  for (long long i = 0; i < m; i++) {
    update(i + 1, i + 1, -b[i].second, 1, m);
    bt[i] = b[i].first;
  }
  for (long long i = 0; i < p; i++) {
    cin >> mon[i].d >> mon[i].a >> mon[i].c;
  }
  sort(mon, mon + p, cmp);
  long long j = 0;
  long long ans = -mod;
  for (long long i = 0; i < n; i++) {
    while (j < p) {
      if (mon[j].d < a[i].first) {
        long long idx = upper_bound(bt, bt + m, mon[j].a) - bt;
        if (idx + 1 <= m) update(idx + 1, m, mon[j].c, 1, m);
        j++;
      } else
        break;
    }
    long long Ans = -a[i].second;
    Ans += query(1, m, 1, m);
    ans = max(ans, Ans);
  }
  cout << ans;
}
