#include <bits/stdc++.h>
using namespace std;
const int MX = 1000006;
const long long inf = 1e18;
long long n, m, p, a[MX], ca[MX], b[MX], cb[MX], mn[MX];
long long x[MX], y[MX], z[MX];
long long st[4 * MX + 20], lz[4 * MX + 20], res = -inf;
vector<int> pos[MX];
void push(int i, int j, int pos) {
  if (i < j) {
    lz[pos * 2] += lz[pos];
    lz[pos * 2 + 1] += lz[pos];
  }
  st[pos] += lz[pos];
  lz[pos] = 0;
}
void update(int i, int j, int pos, int a, int b, long long k) {
  if (lz[pos]) push(i, j, pos);
  if (j < a || b < i) return;
  if (a <= i && j <= b) {
    lz[pos] = k;
    push(i, j, pos);
    return;
  }
  int m = (i + j) / 2;
  update(i, m, pos * 2, a, b, k);
  update(m + 1, j, pos * 2 + 1, a, b, k);
  st[pos] = max(st[pos * 2], st[pos * 2 + 1]);
}
long long query(int i, int j, int pos, int a, int b) {
  if (lz[pos]) push(i, j, pos);
  if (j < a || b < i) return -inf;
  if (a <= i && j <= b) return st[pos];
  int m = (i + j) / 2;
  return max(query(i, m, pos * 2, a, b), query(m + 1, j, pos * 2 + 1, a, b));
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m >> p;
  fill(mn, mn + MX, inf);
  for (int i = 1; i <= n; i++) {
    cin >> a[i] >> ca[i];
    mn[a[i]] = min(mn[a[i]], ca[i]);
  }
  for (int i = 1; i < MX; i++) update(1, MX - 1, 1, i, i, -mn[i]);
  fill(mn, mn + MX, inf);
  for (int i = 1; i <= m; i++) {
    cin >> b[i] >> cb[i];
    mn[b[i]] = min(mn[b[i]], cb[i]);
  }
  for (int i = 1; i <= p; i++) {
    cin >> x[i] >> y[i] >> z[i];
    pos[y[i]].push_back(i);
  }
  for (int i = 1; i < MX - 1; i++) {
    for (int j : pos[i - 1]) update(1, MX - 1, 1, x[j] + 1, MX - 1, z[j]);
    push(1, MX - 1, 1);
    res = max(res, st[1] - mn[i]);
  }
  cout << res << '\n';
  return 0;
}
