#include <bits/stdc++.h>
using namespace std;
long long n, m, q, ans = -1000000000000006, son = 1, seg[4 * 1000005],
                   laz[4 * 1000005];
pair<long long, long long> a[1000005], b[1000005];
void bu(long long k, long long bas, long long son) {
  if (bas == son) {
    seg[k] = -b[bas].second;
    return;
  }
  bu((k + k), bas, ((bas + son) / 2));
  bu((k + k + 1), ((bas + son) / 2) + 1, son);
  seg[k] = max(seg[(k + k)], seg[(k + k + 1)]);
}
void up(long long k, long long bas, long long son, long long x, long long y,
        long long z) {
  if (bas > y or son < x) return;
  if (bas >= x and son <= y) {
    seg[k] += z;
    laz[k] += z;
    return;
  }
  seg[(k + k)] += laz[k];
  seg[(k + k + 1)] += laz[k];
  laz[(k + k)] += laz[k];
  laz[(k + k + 1)] += laz[k];
  laz[k] = 0;
  up((k + k), bas, ((bas + son) / 2), x, y, z);
  up((k + k + 1), ((bas + son) / 2) + 1, son, x, y, z);
  seg[k] = max(seg[(k + k)], seg[(k + k + 1)]);
}
pair<long long, pair<long long, long long> > c[1000005];
int main() {
  scanf("%lld %lld %lld", &n, &m, &q);
  for (long long i = 1; i <= n; i++)
    scanf("%lld %lld", &a[i].first, &a[i].second);
  sort(a + 1, a + n + 1);
  for (long long i = 1; i <= m; i++)
    scanf("%lld %lld", &b[i].first, &b[i].second);
  sort(b + 1, b + m + 1);
  bu(1, 1, m);
  for (long long i = 1; i <= q; i++) {
    scanf("%lld %lld %lld", &c[i].first, &c[i].second.first,
          &c[i].second.second);
  }
  sort(c + 1, c + q + 1);
  for (long long i = 1; i <= n; i++) {
    while (son <= q and c[son].first < a[i].first) {
      long long ind =
          upper_bound(b + 1, b + m + 1,
                      make_pair(c[son].second.first, 1000000009 * 1ll)) -
          b;
      if (ind <= m) up(1, 1, m, ind, m, c[son].second.second);
      son++;
    }
    ans = max(ans, seg[1ll] - a[i].second);
  }
  printf("%lld\n", ans);
  return 0;
}
