#include <bits/stdc++.h>
using namespace std;
long long MOD = 1e9 + 7;
const long long maxn = 2e5 + 5;
long long t[4 * maxn], lazy[4 * maxn];
void push(long long v) {
  t[v * 2] += lazy[v];
  lazy[v * 2] += lazy[v];
  t[v * 2 + 1] += lazy[v];
  lazy[v * 2 + 1] += lazy[v];
  lazy[v] = 0;
}
void update(long long v, long long tl, long long tr, long long l, long long r,
            long long addend) {
  if (l > r) return;
  if (l == tl && tr == r) {
    t[v] += addend;
    lazy[v] += addend;
  } else {
    push(v);
    long long tm = (tl + tr) / 2;
    update(v * 2, tl, tm, l, min(r, tm), addend);
    update(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r, addend);
    t[v] = max(t[v * 2], t[v * 2 + 1]);
  }
}
long long query(long long v, long long tl, long long tr, long long l,
                long long r) {
  if (l > r) return -1e18;
  if (l <= tl && tr <= r) return t[v];
  push(v);
  long long tm = (tl + tr) / 2;
  return max(query(v * 2, tl, tm, l, min(r, tm)),
             query(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r));
}
long long f() {
  long long ans = -1e18;
  long long n, m, p;
  cin >> n >> m >> p;
  pair<long long, long long> a[n], b[m];
  for (long long i = 0; i < n; ++i) {
    cin >> a[i].second >> a[i].first;
  }
  for (long long i = 0; i < m; ++i) {
    cin >> b[i].second >> b[i].first;
  }
  sort(a, a + n);
  sort(b, b + m);
  vector<pair<long long, long long> > attack, defense;
  vector<long long> powerdefense;
  for (long long i = 0; i < n; ++i) {
    if (attack.empty())
      attack.emplace_back(a[i]);
    else if (attack.back().second < a[i].second)
      attack.emplace_back(a[i]);
  }
  for (long long i = 0; i < m; ++i) {
    if (defense.empty())
      defense.emplace_back(b[i]);
    else if (defense.back().second < b[i].second)
      defense.emplace_back(b[i]);
  }
  for (const auto &it : defense) {
    powerdefense.emplace_back(it.second);
  }
  vector<pair<long long, pair<long long, long long> > > monster;
  for (long long i = 0; i < p; ++i) {
    long long x, y, z;
    cin >> x >> y >> z;
    monster.push_back({x, {y, z}});
  }
  sort(monster.begin(), monster.end());
  m = defense.size();
  for (long long i = 0; i < m; ++i) {
    update(1, 0, m - 1, i, i, -defense[i].first);
  }
  long long j = 0;
  for (const auto &it : attack) {
    while (j < p and it.second > monster[j].first) {
      auto temp = upper_bound(powerdefense.begin(), powerdefense.end(),
                              monster[j].second.first) -
                  powerdefense.begin();
      update(1, 0, m - 1, temp, m - 1, monster[j].second.second);
      j++;
    }
    long long currans = -it.first + query(1, 0, m - 1, 0, m - 1);
    ans = max(ans, currans);
  }
  return ans;
}
int32_t main() {
  ios_base::sync_with_stdio(0);
  ;
  long long t = 1;
  while (t--) {
    cout << f() << '\n';
  }
  return 0;
}
