#include <bits/stdc++.h>
using namespace std;
long long N, M, P, A[1000016 + 10], lazy[3 * 1000016], bene[1000016];
long long sol = -1ll << 60, lazyv[3 * 1000016], y, v, x, Y[1000016];
long long T[3 * 1000016];
struct dos {
  long long p, v;
} X[1000006];
struct tres {
  long long x, y, v;
} pt[1000006];
bool comp(const dos &h, const dos &k) { return h.p < k.p; }
bool compx(const tres &h, const tres &k) { return h.x < k.x; }
bool compy(const tres &h, const tres &k) { return h.y < k.y; }
void built(int nod, int ini, int fin) {
  if (ini == fin) {
    T[nod] = A[ini];
    return;
  }
  int mid = (ini + fin) / 2;
  built(2 * nod, ini, mid);
  built(2 * nod + 1, mid + 1, fin);
  T[nod] = max(T[2 * nod], T[2 * nod + 1]);
}
void laz(int nod, int ini, int fin) {
  lazy[nod] = 0;
  T[nod] -= lazyv[nod];
  int v = lazyv[nod];
  lazyv[nod] = 0;
  if (ini == fin) return;
  lazy[2 * nod] = 1;
  lazy[2 * nod + 1] = 1;
  lazyv[2 * nod] += v;
  lazyv[2 * nod + 1] += v;
}
long long update(int nod, int ini, int fin, int a, int b, long long v) {
  if (lazy[nod]) laz(nod, ini, fin);
  if (fin < a || ini > b) return T[nod];
  if (a <= ini && fin <= b) {
    lazy[nod] = 1;
    lazyv[nod] = v;
    return T[nod] - v;
  }
  int mid = (ini + fin) / 2;
  long long v1 = update(2 * nod, ini, mid, a, b, v);
  long long v2 = update(2 * nod + 1, mid + 1, fin, a, b, v);
  return T[nod] = max(v1, v2);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> N >> M >> P;
  for (int i = 1; i <= N; i++) cin >> X[i].p >> X[i].v;
  for (int i = 0; i <= 1000006; i++) Y[i] = 1ll << 60;
  for (int i = 1; i <= M; i++) {
    cin >> y >> v;
    Y[y] = min(Y[y], v);
  }
  for (int i = 1; i <= P; i++) cin >> pt[i].x >> pt[i].y >> pt[i].v;
  sort(pt + 1, pt + 1 + P, compy);
  int pos = 1;
  for (int i = 1; i <= 1000006; i++) {
    while (pos <= P && pt[pos].y < i) bene[i] += pt[pos++].v;
    bene[i] += bene[i - 1];
  }
  for (int i = 1000006 - 1; i >= 0; i--) {
    Y[i] = min(Y[i], Y[i + 1]);
    A[i] = bene[i] - Y[i];
  }
  built(1, 1, 1000006 - 1);
  sort(pt + 1, pt + 1 + P, compx);
  sort(X + 1, X + 1 + N, comp);
  pos = P;
  int val = T[1];
  for (int i = N; i >= 1; i--) {
    long long x = X[i].p;
    while (pos && pt[pos].x >= x)
      val = update(1, 1, 1000006, pt[pos].y + 1, 1000006, pt[pos].v), pos--;
    sol = max(sol, val - (long long)X[i].v);
  }
  cout << sol << "\n";
}
