#include <bits/stdc++.h>
using namespace std;
double PI = 3.141592653589793238462643383279;
const double EPS = 1e-9;
const long long MOD = 1000000007;
const int inf = 1 << 30;
const long long linf = 1LL << 50;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
template <typename T>
struct starrytree {
  int n;
  T unit;
  vector<T> segmax, segadd;
  void init(int n_, T _unit) {
    n = 1;
    unit = _unit;
    while (n < n_) n *= 2;
    segmax.assign(2 * n - 1, 0);
    segadd.assign(2 * n - 1, 0);
  }
  void clear() {
    for (int i = 0; i < 2 * n - 1; i++) {
      segadd[i] = 0;
      segmax[i] = 0;
    }
  }
  void add(int a, int b, int k, int l, int r, T v) {
    if (b <= l || a >= r) return;
    if (a <= l && r <= b) {
      segadd[k] += v;
      return;
    }
    add(a, b, k * 2 + 1, l, (l + r) / 2, v);
    add(a, b, k * 2 + 2, (l + r) / 2, r, v);
    segmax[k] = max(segmax[k * 2 + 1] + segadd[k * 2 + 1],
                    segmax[k * 2 + 2] + segadd[k * 2 + 2]);
  }
  T getmax(int a, int b, int k, int l, int r) {
    if (b <= l || a >= r) return unit;
    if (a <= l && r <= b) return segadd[k] + segmax[k];
    T lm = getmax(a, b, k * 2 + 1, l, (l + r) / 2);
    T rm = getmax(a, b, k * 2 + 2, (l + r) / 2, r);
    return max(lm, rm) + segadd[k];
  }
};
starrytree<long long> stree;
int n, m, p;
pair<long long, long long> a[200000];
pair<long long, long long> b[200000];
bool ded[200000];
pair<pair<long long, long long>, long long> x[200000];
int main() {
  scanf("%d%d%d", &n, &m, &p);
  for (int i = 0; i < (int)n; i++) scanf("%lld%lld", &a[i].first, &a[i].second);
  for (int i = 0; i < (int)m; i++) scanf("%lld%lld", &b[i].first, &b[i].second);
  for (int i = 0; i < (int)p; i++)
    scanf("%lld%lld%lld", &x[i].first.first, &x[i].first.second, &x[i].second);
  sort(a, a + n);
  sort(b, b + m);
  sort(x, x + p);
  stree.init(1000001, -linf);
  long long M = linf;
  for (int i = m - 1; i >= 0; i--) {
    if (b[i].second >= M) {
      ded[i] = true;
      continue;
    }
    M = b[i].second;
  }
  int prei = -1;
  for (int i = 0; i < (int)m; i++) {
    if (ded[i]) continue;
    if (prei == -1) {
      stree.add(0, b[i].first, 0, 0, stree.n, -b[i].second);
    } else {
      stree.add(b[prei].first, b[i].first, 0, 0, stree.n, -b[i].second);
    }
    prei = i;
  }
  stree.add(b[prei].first, stree.n, 0, 0, stree.n, -linf);
  long long ans = -linf;
  int pos = 0;
  for (int i = 0; i < (int)n; i++) {
    while (pos < p && x[pos].first.first < a[i].first) {
      stree.add(x[pos].first.second, stree.n, 0, 0, stree.n, x[pos].second);
      pos++;
    }
    long long t = stree.getmax(0, stree.n, 0, 0, stree.n);
    ans = max(ans, t - a[i].second);
  }
  printf("%lld\n", ans);
}
