#include <bits/stdc++.h>
using namespace std;
const int INF = 2e9;
const int maxn = 2e5;
int n, m, p;
int e[maxn + 5], mn[maxn + 5];
struct node {
  int mx;
  int lazy;
} b[4 * maxn + 5];
void pushup(int p) { b[p].mx = max(b[p << 1].mx, b[p << 1 | 1].mx); }
void build(int p, int l, int r) {
  b[p].lazy = 0;
  if (l == r) {
    b[p].mx = -mn[l];
    return;
  }
  int mid = (l + r) >> 1;
  build(p << 1, l, mid);
  build(p << 1 | 1, mid + 1, r);
  pushup(p);
}
void pushdown(int p) {
  if (b[p].lazy) {
    b[p << 1].lazy += b[p].lazy;
    b[p << 1 | 1].lazy += b[p].lazy;
    b[p << 1].mx += b[p].lazy;
    b[p << 1 | 1].mx += b[p].lazy;
    b[p].lazy = 0;
  }
}
void modify(int p, int l, int r, int L, int R, int val) {
  if (L > R) return;
  if (L <= l && r <= R) {
    b[p].lazy += val;
    b[p].mx += val;
    return;
  }
  int mid = (l + r) >> 1;
  pushdown(p);
  if (L <= mid) modify(p << 1, l, mid, L, R, val);
  if (R > mid) modify(p << 1 | 1, mid + 1, r, L, R, val);
  pushup(p);
}
struct hero {
  int x, y, val;
} c[maxn + 5];
bool cmp(hero a, hero b) {
  if (a.x != b.x) return a.x < b.x;
  if (a.y != b.y) return a.y < b.y;
  return a.val < b.val;
}
struct w1 {
  int x, val;
  bool operator<(const w1 &e) const { return x < e.x; }
} a[maxn + 5];
struct w2 {
  int y, val;
} d[maxn + 5];
int main() {
  scanf("%d%d%d", &n, &m, &p);
  for (int i = 1; i <= n; i++) scanf("%d%d", &a[i].x, &a[i].val);
  sort(a + 1, a + n + 1);
  for (int j = 1; j <= m; j++) {
    scanf("%d%d", &d[j].y, &d[j].val);
    e[j] = d[j].y;
  }
  sort(e + 1, e + m + 1);
  int m0 = unique(e + 1, e + m + 1) - (e + 1);
  for (int i = 1; i <= m0; i++) mn[i] = INF;
  for (int i = 1; i <= m; i++) {
    d[i].y = lower_bound(e + 1, e + m0 + 1, d[i].y) - e;
    mn[d[i].y] = min(mn[d[i].y], d[i].val);
  }
  build(1, 1, m0);
  for (int i = 1; i <= p; i++) scanf("%d%d%d", &c[i].x, &c[i].y, &c[i].val);
  sort(c + 1, c + p + 1, cmp);
  int cur = 1;
  int ans = -INF;
  for (int i = 1; i <= n; i++) {
    while (cur <= p && c[cur].x < a[i].x) {
      int pos = lower_bound(e + 1, e + m0 + 1, c[cur].y) - e;
      if (pos > m0) {
        cur++;
        continue;
      }
      if (e[pos] == c[cur].y)
        modify(1, 1, m0, pos + 1, m0, c[cur].val);
      else
        modify(1, 1, m0, pos, m0, c[cur].val);
      cur++;
    }
    ans = max(ans, b[1].mx - a[i].val);
  }
  printf("%d\n", ans);
  return 0;
}
