#include <bits/stdc++.h>
using namespace std;
struct data_t {
  long long sum, pref, suff, ans;
};
data_t t[4000010];
data_t combine(data_t l, data_t r) {
  data_t res;
  res.sum = l.sum + r.sum;
  res.pref = max(l.pref, l.sum + r.pref);
  res.suff = max(r.suff, r.sum + l.suff);
  res.ans = max(max(l.ans, r.ans), l.suff + r.pref);
  return res;
}
data_t make_data_t(long long val) {
  data_t res;
  res.sum = val;
  res.pref = res.suff = res.ans = max(0ll, val);
  return res;
}
void build(long long a[], int v, int tl, int tr) {
  if (tl == tr) {
    t[v] = make_data_t(a[tl]);
  } else {
    int tm = (tl + tr) / 2;
    build(a, v * 2, tl, tm);
    build(a, v * 2 + 1, tm + 1, tr);
    t[v] = combine(t[v * 2], t[v * 2 + 1]);
  }
}
void update(int v, int tl, int tr, int pos, long long new_val) {
  if (tl == tr) {
    t[v] = make_data_t(new_val);
  } else {
    int tm = (tl + tr) / 2;
    if (pos <= tm)
      update(v * 2, tl, tm, pos, new_val);
    else
      update(v * 2 + 1, tm + 1, tr, pos, new_val);
    t[v] = combine(t[v * 2], t[v * 2 + 1]);
  }
}
data_t query(int v, int tl, int tr, int l, int r) {
  if (l > r) return make_data_t(0);
  if (l == tl && r == tr) return t[v];
  int tm = (tl + tr) / 2;
  return combine(query(v * 2, tl, tm, l, min(r, tm)),
                 query(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r));
}
const int N = 200020, M = 1e6 + 5;
tuple<int, int, int> c[N];
pair<int, int> a[N], b[N];
int n, m, p, x, y, z;
long long ans, f[M + 5];
int main() {
  scanf("%d%d%d", &n, &m, &p);
  for (int i = 0; i < n; i++) scanf("%d%d", &a[i].first, &a[i].second);
  for (int i = 0; i < m; i++)
    scanf("%d%d", &b[i].first, &b[i].second), b[i].second *= -1;
  for (int i = 0; i < p; i++) scanf("%d%d%d", &x, &y, &z), c[i] = tie(x, y, z);
  sort(a, a + n);
  sort(b, b + m);
  sort(c, c + p);
  for (int i = 0; i < m; i++) f[b[i].first] = b[i].second;
  for (int i = 1, cur = 0; i < M; i++)
    if (f[i]) cur += f[i] -= cur;
  for (int i = 0; i < m; i++)
    if (b[i].first != b[i + 1].first)
      f[b[i].first + 1] -= 1e9, f[b[i].first] += 1e9;
  build(f, 1, 0, M);
  update(1, 0, M, b[0].first, f[b[0].first] + 1e9);
  for (int i = 0, j = 0; i < n; i++) {
    for (; j < p; j++) {
      tie(x, y, z) = c[j];
      if (x >= a[i].first) break;
      data_t t1 = query(1, 0, M, 0, y);
      data_t t2 = query(1, 0, M, 0, y + 1);
      update(1, 0, M, y + 1, t2.sum - t1.sum + z);
    }
    data_t cur = query(1, 0, M, 0, M);
    ans = max(ans, cur.pref - a[i].second);
  }
  printf("%lld", ans - (long long)2e9);
}
