#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
long long n, n2 = 1, m, p, dat[800010], delta[800010], ans = -1e18;
pair<long long, long long> a[200010], b[200010];
pair<pair<long long, long long>, int> c[200010];
vector<int> v;
void build(long long k, long long lb, long long ub) {
  if (lb == ub) {
    if (lb < m)
      dat[k] = -b[lb].second;
    else
      dat[k] = -1e18;
    return;
  }
  build(k * 2 + 1, lb, (lb + ub) / 2);
  build(k * 2 + 2, (lb + ub) / 2 + 1, ub);
  dat[k] = max(dat[k * 2 + 1], dat[k * 2 + 2]);
}
void pushdown(long long k) {
  dat[k * 2 + 1] += delta[k];
  delta[k * 2 + 1] += delta[k];
  dat[k * 2 + 2] += delta[k];
  delta[k * 2 + 2] += delta[k];
  delta[k] = 0;
}
void upd(long long k, long long lb, long long ub, long long tlb, long long tub,
         long long val) {
  if (ub < tlb || tub < lb) return;
  if (tlb <= lb && ub <= tub) {
    dat[k] += val;
    delta[k] += val;
    return;
  }
  pushdown(k);
  upd(k * 2 + 1, lb, (lb + ub) / 2, tlb, tub, val);
  upd(k * 2 + 2, (lb + ub) / 2 + 1, ub, tlb, tub, val);
  dat[k] = max(dat[k * 2 + 1], dat[k * 2 + 2]);
}
int main() {
  cin >> n >> m >> p;
  for (int i = 0; i < n; i++) scanf("%I64d%I64d", &a[i].first, &a[i].second);
  for (int i = 0; i < m; i++) scanf("%I64d%I64d", &b[i].first, &b[i].second);
  for (int i = 0; i < p; i++)
    scanf("%I64d%I64d%I64d", &c[i].first.first, &c[i].first.second,
          &c[i].second);
  sort(a, a + n);
  sort(b, b + m);
  sort(c, c + p);
  for (int i = 0; i < m; i++) v.push_back(b[i].first);
  while (n2 < m) n2 *= 2;
  build(0, 0, n2 - 1);
  long long cur = 0;
  for (int i = 0; i < n; i++) {
    while (cur < p && a[i].first > c[cur].first.first) {
      int pos =
          lower_bound(v.begin(), v.end(), c[cur].first.second + 1) - v.begin();
      upd(0, 0, n2 - 1, pos, m - 1, c[cur++].second);
    }
    ans = max(ans, dat[0] - a[i].second);
  }
  cout << ans << endl;
  return 0;
}
