#include <bits/stdc++.h>
using namespace std;
int tree[1000005 * 4], lazy[1000005 * 4];
void push(int k) {
  tree[k * 2] += lazy[k];
  tree[k * 2 + 1] += lazy[k];
  lazy[k * 2] += lazy[k];
  lazy[k * 2 + 1] += lazy[k];
  lazy[k] = 0;
}
void add(int k, int left, int right, int l, int r, int d) {
  if (left > r || right < l) return;
  if (l <= left && r >= right) {
    if (l == r)
      tree[k] = max(tree[k], d);
    else
      tree[k] += d;
    lazy[k] += d;
    return;
  }
  push(k);
  int mid = left + right >> 1;
  add(k * 2, left, mid, l, r, d);
  add(k * 2 + 1, mid + 1, right, l, r, d);
  tree[k] = max(tree[k * 2], tree[k * 2 + 1]);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(NULL);
  int gcd, i, h, l, r, j, k, x, y, z, x1, y1, p, x2, y2, n, m, root, t, sum,
      size, ind, ans = -1e16;
  cin >> n >> m >> p;
  vector<pair<int, int>> wep(n), arm(m);
  for (i = 0; i < n; i++) {
    cin >> x >> y;
    wep[i] = {x, y};
  }
  sort(wep.begin(), wep.end());
  fill(tree, tree + 1000005 * 4, -1e18);
  for (i = 0; i < m; i++) {
    cin >> x >> y;
    x--;
    add(1, 0, 1000005, x, x, -y);
  }
  vector<pair<pair<int, int>, int>> vp;
  for (i = 0; i < p; i++) {
    cin >> x >> y >> z;
    vp.push_back({{x, y}, z});
  }
  sort(vp.begin(), vp.end());
  j = 0;
  for (i = 0; i < n; i++) {
    while (j < p && wep[i].first > vp[j].first.first) {
      add(1, 0, 1000005, vp[j].first.second, 1000005, vp[j].second);
      j++;
    }
    ans = max(ans, -wep[i].second + tree[1]);
  }
  cout << ans;
  return 0;
}
