#include <bits/stdc++.h>
using namespace std;
int n, m, p;
pair<long long, long long> a[200005], b[200005];
vector<tuple<long long, long long, long long> > mons;
long long st[4 * 1000005];
long long lz[4 * 1000005];
long long ara[1000005];
long long first(long long l, long long r) { return max(l, r); }
void propagate(long long node, long long ss, long long sf) {
  if (lz[node] == 0) return;
  st[node] += lz[node];
  if (ss != sf) {
    lz[2 * node] += lz[node];
    lz[2 * node + 1] += lz[node];
  }
  lz[node] = 0;
}
void init(long long node, long long ss, long long sf) {
  if (ss == sf) {
    st[node] = ara[ss];
    return;
  }
  long long mid = (ss + sf) / 2;
  init(2 * node, ss, mid);
  init(2 * node + 1, mid + 1, sf);
  st[node] = first(st[2 * node], st[2 * node + 1]);
}
void update(long long node, long long ss, long long sf, long long qs,
            long long qe, long long val) {
  propagate(node, ss, sf);
  if (qs > sf || qe < ss || sf < ss) return;
  if (qs <= ss && qe >= sf) {
    lz[node] += val;
    propagate(node, ss, sf);
    return;
  }
  long long mid = (ss + sf) / 2;
  update(2 * node, ss, mid, qs, qe, val);
  update(2 * node + 1, mid + 1, sf, qs, qe, val);
  st[node] = first(st[2 * node], st[2 * node + 1]);
}
long long query(long long node, long long ss, long long sf, long long qs,
                long long qe) {
  propagate(node, ss, sf);
  if (qs > sf || qe < ss || sf < ss) return -LLONG_MAX;
  if (qs <= ss && qe >= sf) return st[node];
  long long mid = (ss + sf) / 2;
  return first(query(2 * node, ss, mid, qs, qe),
               query(2 * node + 1, mid + 1, sf, qs, qe));
}
int main() {
  {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
  };
  cin >> n >> m >> p;
  for (int i = 0; i < n; i++) cin >> a[i].first >> a[i].second;
  for (int i = 0; i < m; i++) cin >> b[i].first >> b[i].second;
  for (int i = 0; i < p; i++) {
    int x, y, z;
    cin >> x >> y >> z;
    mons.push_back(make_tuple(x, y, z));
  }
  sort(a, a + n);
  sort(mons.begin(), mons.end());
  for (int i = 0; i <= 1000003; i++) ara[i] = -LLONG_MAX;
  ;
  for (int i = 0; i < m; i++) {
    ara[b[i].first] = max(ara[b[i].first], -b[i].second);
  }
  init(1, 1, 1000000);
  long long ans = -LLONG_MAX;
  ;
  int l = 0;
  for (int i = 0; i < n; i++) {
    int up = a[i].first;
    long long tmp = -a[i].second;
    while (l < p && get<0>(mons[l]) < up) {
      update(1, 1, 1000000, get<1>(mons[l]) + 1, 1000000, get<2>(mons[l]));
      l++;
    }
    tmp += query(1, 1, 1000000, 1, 1000000);
    ans = max(ans, tmp);
  }
  cout << ans << endl;
}
