#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
int n, m, p, a[N], ca[N], b[N], cb[N], x[N], y[N], z[N];
int weapon[N], armor[N], monster[N], lz[N << 2], seg[N << 2];
void add(int id, int x) { seg[id] += x, lz[id] += x; }
void shift(int id) {
  add(id << 1 | 1, lz[id]);
  add(id << 1, lz[id]);
  lz[id] = 0;
}
void update(int l, int r, int x, int id = 1, int st = 0, int en = m) {
  if (r <= st || en <= l) return;
  if (l <= st && en <= r) return add(id, x);
  shift(id);
  int mid = st + en >> 1;
  update(l, r, x, id << 1, st, mid);
  update(l, r, x, id << 1 | 1, mid, en);
  seg[id] = max(seg[id << 1], seg[id << 1 | 1]);
}
void read_input() {
  cin >> n >> m >> p;
  for (int i = 0; i < n; i++) cin >> a[i] >> ca[i];
  for (int i = 0; i < m; i++) cin >> b[i] >> cb[i];
  for (int i = 0; i < p; i++) cin >> x[i] >> y[i] >> z[i];
}
void solve() {
  int ans = -2e9;
  iota(armor, armor + m, 0);
  sort(armor, armor + m, [](int i, int j) { return b[i] < b[j]; });
  iota(weapon, weapon + n, 0);
  sort(weapon, weapon + n, [](int i, int j) { return a[i] < a[j]; });
  iota(monster, monster + p, 0);
  sort(monster, monster + p, [](int i, int j) { return x[i] < x[j]; });
  for (int i = 0; i < m; i++) update(i, i + 1, -cb[armor[i]]);
  for (int i = 0, p1 = 0; i <= p; i++) {
    while (p1 < n && (i == p || a[weapon[p1]] <= x[monster[i]]))
      ans = max(ans, seg[1] - ca[weapon[p1++]]);
    int L = -1, R = m;
    while (R - L > 1) {
      int mid = L + R >> 1;
      (b[armor[mid]] > y[monster[i]] ? R : L) = mid;
    }
    update(R, m, z[monster[i]]);
  }
  cout << ans;
}
int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  read_input(), solve();
  return 0;
}
