#include <bits/stdc++.h>
using namespace std;
namespace red {
inline long long read() {
  long long x = 0;
  char ch, f = 1;
  for (ch = getchar(); (ch < '0' || ch > '9') && ch != '-'; ch = getchar())
    ;
  if (ch == '-') f = 0, ch = getchar();
  while (ch >= '0' && ch <= '9') {
    x = (x << 1) + (x << 3) + ch - '0';
    ch = getchar();
  }
  return f ? x : -x;
}
const long long N = 1e6 + 10, inf = 1e12;
long long haku;
long long n, m, k, ret = -inf;
struct node {
  long long val, c;
  inline bool operator<(const node &t) const { return val < t.val; }
} a[N], b[N];
struct point {
  long long x, y, z;
  inline bool operator<(const point &t) const { return x < t.x; }
} g[N];
long long ans[N << 2], tag[N << 2];
inline void pushdown(long long p) {
  ans[(p << 1)] += tag[p];
  ans[(p << 1 | 1)] += tag[p];
  tag[(p << 1)] += tag[p];
  tag[(p << 1 | 1)] += tag[p];
  tag[p] = 0;
}
inline void update(long long tl, long long tr, long long l, long long r,
                   long long p, long long k) {
  if (tl <= l && r <= tr) {
    ans[p] += k;
    tag[p] += k;
    return;
  }
  if (tag[p]) pushdown(p);
  if (tl <= ((l + r) >> 1)) update(tl, tr, l, ((l + r) >> 1), (p << 1), k);
  if (tr > ((l + r) >> 1))
    update(tl, tr, ((l + r) >> 1) + 1, r, (p << 1 | 1), k);
  ans[p] = max(ans[(p << 1)], ans[(p << 1 | 1)]);
}
inline long long erfen(long long x, long long m) {
  long long l = 1, r = m, ans = m + 1;
  while (l <= r) {
    if (b[((l + r) >> 1)].val <= x)
      l = ((l + r) >> 1) + 1;
    else
      ans = ((l + r) >> 1), r = ((l + r) >> 1) - 1;
  }
  return ans;
}
inline void main() {
  n = read(), m = read(), k = read();
  for (long long i = 1; i <= n; ++i) a[i].val = read(), a[i].c = read();
  sort(a + 1, a + n + 1);
  long long nn = n, n = 0;
  for (long long i = 1; i <= nn; ++i) {
    while (a[i].c <= a[n].c && n) --n;
    a[++n] = a[i];
  }
  for (long long i = 1; i <= m; ++i) b[i].val = read(), b[i].c = read();
  sort(b + 1, b + m + 1);
  long long mm = m, m = 0;
  for (long long i = 1; i <= mm; ++i) {
    while (b[i].c <= b[m].c && m) --m;
    b[++m] = b[i];
  }
  for (long long i = 1; i <= k; ++i)
    g[i].x = read(), g[i].y = read(), g[i].z = read();
  sort(g + 1, g + k + 1);
  long long t = 1;
  for (long long i = 1; i <= m; ++i) update(i, i, 1, m, 1, -b[i].c);
  for (long long i = 1; i <= n; ++i) {
    while (g[t].x < a[i].val && t <= k) {
      long long pos = erfen(g[t].y, m);
      if (pos <= m) update(pos, m, 1, m, 1, g[t].z);
      ++t;
    }
    ret = max(ret, ans[1] - a[i].c);
  }
  printf("%lld\n", ret);
}
}  // namespace red
signed main() {
  red::main();
  return 0;
}
