#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
const long long INF = 1e15;
void push(int tv, vector<long long> &seg, vector<long long> &lazy) {
  seg[2 * tv + 1] += lazy[tv];
  seg[2 * tv + 2] += lazy[tv];
  lazy[2 * tv + 1] += lazy[tv];
  lazy[2 * tv + 2] += lazy[tv];
  lazy[tv] = 0;
}
void upd(vector<long long> &seg, vector<long long> &lazy, int tv, int tl,
         int tr, int l, int r, long long val) {
  if (l > r) return;
  if (tl == l and tr == r)
    seg[tv] += val, lazy[tv] += val;
  else {
    push(tv, seg, lazy);
    int tm = tl + (tr - tl) / 2;
    upd(seg, lazy, 2 * tv + 1, tl, tm, l, min(r, tm), val);
    upd(seg, lazy, 2 * tv + 2, tm + 1, tr, max(l, tm + 1), r, val);
    seg[tv] = max(seg[2 * tv + 1], seg[2 * tv + 2]);
  }
}
void solve() {
  int n, m, p;
  cin >> n >> m >> p;
  vector<pair<long long, long long>> a(n), d(m);
  vector<pair<pair<long long, long long>, long long>> mons(p);
  long long ans = -MOD, mx = -MOD;
  for (auto &i : a) cin >> i.first >> i.second, ans = max(ans, -i.second);
  for (auto &i : d) cin >> i.first >> i.second, mx = max(mx, -i.second);
  ans += mx;
  for (auto &i : mons) cin >> i.first.first >> i.first.second >> i.second;
  sort(a.begin(), a.end());
  sort(d.begin(), d.end());
  sort(mons.begin(), mons.end());
  vector<long long> seg(4 * m + 5, 0), lazy(4 * m + 5, 0);
  for (int i = 0; i < m; i++) upd(seg, lazy, 0, 0, m - 1, i, i, -d[i].second);
  int ind = 0;
  for (auto i : a) {
    while (ind < p and mons[ind].first.first < i.first) {
      long long temp = mons[ind].first.second, val = mons[ind].second;
      ;
      int pos =
          lower_bound(d.begin(), d.end(), make_pair(temp, INF)) - d.begin();
      if (pos < m) upd(seg, lazy, 0, 0, m - 1, pos, m - 1, val);
      ind++;
    }
    ans = max(ans, -i.second + seg[0]);
  }
  cout << ans;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  ;
  solve();
}
