#include <bits/stdc++.h>
using namespace std;
vector<long long> seg, lazy, cst;
long long lst;
void update(long long ql, long long qr, long long x, long long l = 0,
            long long r = lst, long long id = 0) {
  long long mid = (l + r) >> 1, left = 2 * id + 1, right = 2 * id + 2;
  if (lazy[id]) {
    if (l + 1 != r) {
      lazy[left] += lazy[id];
      lazy[right] += lazy[id];
    }
    seg[id] += lazy[id];
    lazy[id] = 0;
  }
  if (ql >= r || l >= qr) return;
  if (ql <= l && r <= qr) {
    seg[id] += x;
    if (l + 1 != r) {
      lazy[left] += x;
      lazy[right] += x;
    }
    return;
  }
  update(ql, qr, x, l, mid, left);
  update(ql, qr, x, mid, r, right);
  seg[id] = max(seg[left], seg[right]);
}
void build(long long l = 0, long long r = lst, long long id = 0) {
  if (l + 1 == r) {
    seg[id] = cst[l];
    return;
  }
  long long mid = (l + r) >> 1, left = 2 * id + 1, right = 2 * id + 2;
  build(l, mid, left);
  build(mid, r, right);
  seg[id] = max(seg[left], seg[right]);
}
void init() {}
void solve() {
  long long n, m, p;
  cin >> n >> m >> p;
  vector<pair<long long, long long>> w, ar;
  vector<pair<pair<long long, long long>, long long>> mon;
  for (__typeof(n) i = (0) - ((0) > (n)); i != (n) - ((0) > (n));
       i += 1 - 2 * ((0) > (n))) {
    long long p, c;
    cin >> p >> c;
    w.push_back({p, c});
  }
  for (__typeof(m) i = (0) - ((0) > (m)); i != (m) - ((0) > (m));
       i += 1 - 2 * ((0) > (m))) {
    long long p, c;
    cin >> p >> c;
    ar.push_back({p, c});
  }
  ar.push_back({0, 1e9});
  sort((w).begin(), (w).end());
  sort((ar).begin(), (ar).end());
  lst = ar[m].first + 1;
  long long z = ar[m].second;
  cst.assign(lst, 0);
  seg.assign(4 * lst, 0);
  lazy.assign(4 * lst, 0);
  for (__typeof(1) i = (m + 1) - ((m + 1) > (1)); i != (1) - ((m + 1) > (1));
       i += 1 - 2 * ((m + 1) > (1))) {
    z = min(z, ar[i].second);
    cst[ar[i].first] = -z;
    for (__typeof(ar[i - 1].first) j =
             (ar[i].first) - ((ar[i].first) > (ar[i - 1].first));
         j != (ar[i - 1].first) - ((ar[i].first) > (ar[i - 1].first));
         j += 1 - 2 * ((ar[i].first) > (ar[i - 1].first)))
      cst[j] = -z;
  }
  build();
  for (__typeof(p) i = (0) - ((0) > (p)); i != (p) - ((0) > (p));
       i += 1 - 2 * ((0) > (p))) {
    long long st, po, ct;
    cin >> st >> po >> ct;
    mon.push_back({{st, po}, ct});
  }
  sort((mon).begin(), (mon).end());
  long long ans = INT_MIN;
  long long moncnt = 0;
  for (__typeof(n) i = (0) - ((0) > (n)); i != (n) - ((0) > (n));
       i += 1 - 2 * ((0) > (n))) {
    while (moncnt < p && mon[moncnt].first.first < w[i].first) {
      update(min(mon[moncnt].first.second + 1, lst), lst, mon[moncnt].second);
      moncnt++;
    }
    ans = max(ans, seg[0] + lazy[0] - w[i].second);
  }
  cout << ans << endl;
}
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long t = 1;
  init();
  while (t--) {
    solve();
  }
  return 0;
}
