#include <bits/stdc++.h>
using namespace std;
int N, M, P;
pair<pair<int, int>, int> m[200100];
pair<int, int> a[200100], b[200100], temp[200100];
long long aint[200100 * 4], up[200100 * 4];
long long MINY = -1000000000LL * 1000000000LL;
inline void relax(int nod, int st, int dr) {
  if (up[nod] == MINY) return;
  aint[nod] += up[nod];
  if (st != dr) {
    if (up[2 * nod] == MINY) up[2 * nod] = 0;
    up[2 * nod] += up[nod];
    if (up[2 * nod + 1] == MINY) up[2 * nod + 1] = 0;
    up[2 * nod + 1] += up[nod];
  }
  up[nod] = MINY;
}
void update(int nod, int ist, int idr, int st, int dr, long long val) {
  relax(nod, st, dr);
  int mij = (st + dr) / 2;
  if (st != dr) {
    relax(2 * nod, st, mij);
    relax(2 * nod + 1, mij + 1, dr);
  }
  if (ist <= st && idr >= dr) {
    if (up[nod] == MINY) up[nod] = 0;
    up[nod] += val;
    relax(nod, st, dr);
    if (st != dr) {
      relax(2 * nod, st, mij);
      relax(2 * nod + 1, mij + 1, dr);
    }
  } else {
    if (ist <= mij) update(2 * nod, ist, idr, st, mij, val);
    if (idr > mij) update(2 * nod + 1, ist, idr, mij + 1, dr, val);
    relax(2 * nod, st, mij);
    relax(2 * nod + 1, mij + 1, dr);
    aint[nod] = max(aint[2 * nod], aint[2 * nod + 1]);
  }
}
long long calc(int nod, int ist, int idr, int st, int dr) {
  relax(nod, st, dr);
  long long ret = MINY;
  int mij = (st + dr) / 2;
  if (st != dr) {
    relax(2 * nod, st, mij);
    relax(2 * nod + 1, mij + 1, dr);
  }
  if (ist <= st && idr >= dr)
    ret = aint[nod];
  else {
    if (ist <= mij) ret = max(ret, calc(2 * nod, ist, idr, st, mij));
    if (idr > mij) ret = max(ret, calc(2 * nod + 1, ist, idr, mij + 1, dr));
  }
  return ret;
}
void displ() {
  for (int i = 1; i <= P; ++i) {
    cout << calc(1, i, i, 1, P) << " ";
  }
  cout << endl;
}
int main() {
  cin.sync_with_stdio(false);
  cin >> N >> M >> P;
  long long mina = MINY, minb = MINY;
  int maxP = P;
  for (int i = 0; i < N; ++i) {
    cin >> a[i].first >> a[i].second;
    mina = max(mina, -1LL * a[i].second);
  }
  sort(a, a + N);
  for (int i = N - 2; i >= 0; --i)
    if (a[i].second > a[i + 1].second) a[i].second = a[i + 1].second;
  for (int i = 0; i < M; ++i) {
    cin >> b[i].first >> b[i].second;
    minb = max(minb, -1LL * b[i].second);
  }
  sort(b, b + M);
  for (int i = M - 2; i >= 0; --i)
    if (b[i].second > b[i + 1].second) b[i].second = b[i + 1].second;
  long long ret = mina + minb;
  for (int i = 1; i <= P; ++i)
    cin >> m[i].first.first >> m[i].first.second >> m[i].second;
  sort(m + 1, m + P + 1);
  int ind = 0;
  for (int i = 1; i <= P; ++i) {
    while (ind < N && m[i].first.first >= a[ind].first) ++ind;
    if (ind == N) {
      maxP = i - 1;
      break;
    }
    update(1, i, i, 1, P, -a[ind].second);
  }
  if (maxP == 0) {
    cout << ret << "\n";
    return 0;
  }
  for (int i = 1; i <= P; ++i) {
    temp[i] = make_pair(m[i].first.second, i);
  }
  sort(temp + 1, temp + P);
  ind = 1;
  for (int i = 0; i < M; ++i) {
    long long rez = -b[i].second;
    while (ind <= P && temp[ind].first < b[i].first) {
      int x = temp[ind].second;
      update(1, x, P, 1, P, m[x].second);
      ++ind;
    }
    rez += calc(1, 1, maxP, 1, P);
    ret = max(ret, rez);
  }
  cout << ret << "\n";
  return 0;
}
