#include <bits/stdc++.h>
using namespace std;
long long int mod = 1e9 + 7;
const long double error = 1e-9;
const long double PI = acosl(-1);
mt19937 rng((unsigned)chrono::system_clock::now().time_since_epoch().count());
inline long long int MOD(long long int x, long long int m = mod) {
  long long int y = x % m;
  return (y >= 0) ? y : y + m;
}
const int inf = 1e9;
const long long int infl = 1e18 + 1;
const int nmax = 1e6 + 10;
int N = 1e6;
long long int tree[4 * nmax];
long long int lazy[4 * nmax];
inline void propagate(int id, int l, int r) {
  if (l != r) {
    lazy[(id << 1)] = (lazy[(id << 1)] + lazy[id]);
    lazy[((id << 1) | 1)] = (lazy[((id << 1) | 1)] + lazy[id]);
  }
  tree[id] = (tree[id] + lazy[id]);
  lazy[id] = 0;
  return;
}
long long int query(int id, int l, int r, int L, int R) {
  propagate(id, l, r);
  if (r < L || R < l) return 0;
  if (L <= l && r <= R) return tree[id];
  int mid = (l + r) >> 1;
  long long int p = query((id << 1), l, mid, L, R);
  long long int q = query(((id << 1) | 1), mid + 1, r, L, R);
  return max(p, q);
}
void update(int id, int l, int r, int L, int R, long long int v) {
  propagate(id, l, r);
  if (r < L || R < l) return;
  if (L <= l && r <= R) {
    lazy[id] = (lazy[id] + v);
    propagate(id, l, r);
    return;
  }
  int mid = (l + r) >> 1;
  update((id << 1), l, mid, L, R, v);
  update(((id << 1) | 1), mid + 1, r, L, R, v);
  tree[id] = max(tree[(id << 1)], tree[((id << 1) | 1)]);
  return;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  ;
  int weapon, armor, monsters;
  cin >> weapon >> armor >> monsters;
  vector<pair<int, long long int>> w(weapon), a(armor);
  vector<pair<pair<int, int>, long long int>> m(monsters);
  for (int i = 0; i < weapon; i++) {
    cin >> w[i].first >> w[i].second;
  }
  for (int i = 0; i < armor; i++) {
    cin >> a[i].first >> a[i].second;
  }
  for (int i = 0; i < monsters; i++) {
    cin >> m[i].first.first >> m[i].first.second >> m[i].second;
  }
  update(1, 1, N, 1, N, -infl);
  sort(a.begin(), a.end());
  int maxarm = 0;
  for (int i = 0; i < armor; i++) {
    maxarm = max(maxarm, a[i].first);
    update(1, 1, N, a[i].first, a[i].first, infl - a[i].second);
    while (i + 1 < armor && a[i].first == a[i + 1].first) i++;
  }
  sort(w.begin(), w.end());
  sort(m.begin(), m.end());
  long long int ans = -infl;
  for (int i = 0, j = 0; i < weapon; i++) {
    while (j < monsters && m[j].first.first < w[i].first) {
      update(1, 1, N, m[j].first.second + 1, maxarm, m[j].second);
      j++;
    }
    long long int cand = query(1, 1, N, 1, N) - w[i].second;
    ans = max(ans, cand);
  }
  cout << ans << "\n";
  return 0;
}
