#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 10, inf = 1e9;
int n, m, p;
pair<int, int> a[maxn], b[maxn];
struct Monster {
  int x, y, z;
  bool operator<(const Monster& b) const { return y < b.y; }
} mo[maxn];
long long st[maxn << 2], lazy[maxn << 2];
void pushUp(int rt) { st[rt] = max(st[(rt << 1)], st[(rt << 1 | 1)]); }
void pushDown(int rt) {
  if (lazy[rt]) {
    st[(rt << 1)] += lazy[rt];
    st[(rt << 1 | 1)] += lazy[rt];
    lazy[(rt << 1)] += lazy[rt];
    lazy[(rt << 1 | 1)] += lazy[rt];
    lazy[rt] = 0;
  }
}
void build(int rt, int L, int R) {
  if (L == R) {
    st[rt] = -a[L].second;
    return;
  }
  int mid = (L + R) >> 1;
  build((rt << 1), L, mid);
  build((rt << 1 | 1), mid + 1, R);
  pushUp(rt);
}
void update(int rt, int l, int r, int L, int R, int val) {
  if (l <= L && R <= r) {
    st[rt] += val;
    lazy[rt] += val;
    return;
  }
  pushDown(rt);
  int mid = (L + R) >> 1;
  if (l <= mid) update((rt << 1), l, r, L, mid, val);
  if (r > mid) update((rt << 1 | 1), l, r, mid + 1, R, val);
  pushUp(rt);
}
int main() {
  scanf("%d%d%d", &n, &m, &p);
  for (int i = 1; i <= n; ++i) scanf("%d%d", &a[i].first, &a[i].second);
  for (int i = 1; i <= m; ++i) scanf("%d%d", &b[i].first, &b[i].second);
  for (int i = 1; i <= p; ++i) scanf("%d%d%d", &mo[i].x, &mo[i].y, &mo[i].z);
  sort(a + 1, a + 1 + n);
  sort(b + 1, b + 1 + m);
  sort(mo + 1, mo + 1 + p);
  build(1, 1, n);
  long long ans = -4e18;
  int now = 1;
  for (int i = 1; i <= m; ++i) {
    while (now <= p && mo[now].y < b[i].first) {
      int pos = upper_bound(a + 1, a + 1 + n, make_pair(mo[now].x, inf)) - a;
      if (pos <= n) update(1, pos, n, 1, n, mo[now].z);
      now++;
    }
    ans = max(ans, st[1] - b[i].second);
  }
  printf("%lld\n", ans);
  return 0;
}
