#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5 + 5;
struct tree {
  int l, r;
  long long dat, add;
} t[MAXN << 2];
struct node1 {
  long long x, y;
} a[MAXN], b[MAXN];
struct node2 {
  long long x, y, z;
} c[MAXN];
bool cmp1(node1 A, node1 B) { return A.x < B.x; }
bool cmp2(node2 A, node2 B) { return A.x < B.x; }
void build(int p, int l, int r) {
  t[p].l = l, t[p].r = r;
  if (l == r) {
    t[p].dat = -b[l].y;
    return;
  }
  int mid = (l + r) >> 1;
  build(p << 1, l, mid);
  build(p << 1 | 1, mid + 1, r);
  t[p].dat = max(t[p << 1].dat, t[p << 1 | 1].dat);
}
void Updata(int p) {
  if (t[p].add) {
    t[p << 1].add += t[p].add;
    t[p << 1 | 1].add += t[p].add;
    t[p << 1].dat += t[p].add;
    t[p << 1 | 1].dat += t[p].add;
    t[p].add = 0;
  }
}
void Change(int p, int l, int r, long long d) {
  if (l <= t[p].l && r >= t[p].r) {
    t[p].add += d;
    t[p].dat += d;
    return;
  }
  Updata(p);
  int mid = (t[p].l + t[p].r) >> 1;
  if (l <= mid) Change(p << 1, l, r, d);
  if (r > mid) Change(p << 1 | 1, l, r, d);
  t[p].dat = max(t[p << 1].dat, t[p << 1 | 1].dat);
}
long long Query_max(int p, int l, int r) {
  if (l <= t[p].l && r >= t[p].r) return t[p].dat;
  Updata(p);
  int mid = (t[p].l + t[p].r) >> 1;
  long long val = -1e18;
  if (l <= mid) val = max(val, Query_max(p << 1, l, r));
  if (r > mid) val = max(val, Query_max(p << 1 | 1, l, r));
  return val;
}
int n, m, p;
long long d[MAXN];
void Add(int k) {
  int pos = upper_bound(d + 1, d + m + 1, c[k].y) - d;
  if (pos <= m) Change(1, pos, m, c[k].z);
}
int main() {
  scanf("%d %d %d", &n, &m, &p);
  for (int i = 1; i <= n; i++) scanf("%lld %lld", &a[i].x, &a[i].y);
  for (int i = 1; i <= m; i++) scanf("%lld %lld", &b[i].x, &b[i].y);
  for (int i = 1; i <= p; i++)
    scanf("%lld %lld %lld", &c[i].x, &c[i].y, &c[i].z);
  sort(a + 1, a + n + 1, cmp1);
  sort(b + 1, b + m + 1, cmp1);
  sort(c + 1, c + p + 1, cmp2);
  for (int i = 1; i <= m; i++) d[i] = b[i].x;
  build(1, 1, m);
  int k = 1;
  long long ans = -1e18;
  for (int i = 1; i <= n; i++) {
    while (k <= p && c[k].x < a[i].x) Add(k++);
    ans = max(ans, Query_max(1, 1, m) - a[i].y);
  }
  printf("%lld", ans);
  return 0;
}
