#include <bits/stdc++.h>
using namespace std;
const long long inf = 0x3f3f3f3f3f3f3f3f;
const int N = 2e5 + 10;
struct node {
  long long val, x, y;
  bool operator<(const node b) const { return x < b.x; }
} a[N], b[N], c[N];
long long t[N << 2], tag[N << 2], d[N];
void pushup(long long x) { t[x] = max(t[x << 1], t[x << 1 | 1]); }
void pushdown(long long x) {
  if (!tag[x]) return;
  t[x << 1] += tag[x];
  t[x << 1 | 1] += tag[x];
  tag[x << 1] += tag[x];
  tag[x << 1 | 1] += tag[x];
  tag[x] = 0;
}
void update(long long x, long long l, long long r, long long L, long long R,
            long long k) {
  if (l >= L && r <= R) {
    t[x] += k;
    tag[x] += k;
    return;
  }
  long long mid = l + r >> 1;
  pushdown(x);
  if (mid >= L) update(x << 1, l, mid, L, R, k);
  if (mid < R) update(x << 1 | 1, mid + 1, r, L, R, k);
  pushup(x);
}
long long Query(long long x, long long l, long long r, long long L,
                long long R) {
  if (l >= L && r <= R) return t[x];
  long long mid = l + r >> 1;
  long long ans = -inf;
  pushdown(x);
  pushup(x);
  if (mid >= L) ans = max(ans, Query(x << 1, l, mid, L, R));
  if (mid < R) ans = max(ans, Query(x << 1 | 1, mid + 1, r, L, R));
  return ans;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n, m, p;
  cin >> n >> m >> p;
  for (int i = 1; i <= n; i++) cin >> a[i].x >> a[i].val;
  for (int i = 1; i <= m; i++) cin >> b[i].x >> b[i].val;
  for (int i = 1; i <= p; i++) cin >> c[i].x >> c[i].y >> c[i].val;
  sort(a + 1, a + n + 1);
  sort(b + 1, b + m + 1);
  sort(c + 1, c + p + 1);
  for (int i = 1; i <= m; i++) d[i] = b[i].x;
  for (int i = 1; i <= m; i++) update(1, 1, m, i, i, -b[i].val);
  long long l = 1;
  long long ans = -inf;
  long long i = 1;
  while (i <= n) {
    while (l <= p && a[i].x > c[l].x) {
      int now = upper_bound(d + 1, d + m + 1, c[l].y) - d;
      if (now <= m) update(1, 1, m, now, m, c[l].val);
      l++;
    }
    ans = max(ans, t[1] - a[i].val);
    i++;
  }
  cout << ans;
  return 0;
}
