#include <bits/stdc++.h>
using namespace std;
long long seg[4000006], lazy[4000006];
bool lz[4000006];
void propagate(long long n) {
  lz[n * 2] = lz[n * 2 + 1] = 1;
  lazy[n * 2] += lazy[n];
  seg[n * 2] += lazy[n];
  lazy[n * 2 + 1] += lazy[n];
  seg[n * 2 + 1] += lazy[n];
  lz[n] = lazy[n] = 0;
  return;
}
void update(long long n, long long s, long long e, long long l, long long r,
            long long val) {
  if (s >= l && e <= r) {
    lz[n] = 1;
    lazy[n] += val;
    seg[n] += val;
    return;
  }
  if (s > r || e < l) return;
  if (lz[n]) propagate(n);
  long long mid = (s + e) >> 1;
  update(n * 2, s, mid, l, r, val);
  update(n * 2 + 1, mid + 1, e, l, r, val);
  seg[n] = max(seg[n * 2], seg[n * 2 + 1]);
  return;
}
void upd(long long n, long long s, long long e, long long indx, long long val) {
  if (s == indx && e == indx) {
    seg[n] = val;
    return;
  }
  if (s > indx || e < indx) return;
  long long mid = (s + e) >> 1;
  upd(n * 2, s, mid, indx, val);
  upd(n * 2 + 1, mid + 1, e, indx, val);
  seg[n] = max(seg[n * 2], seg[n * 2 + 1]);
  return;
}
vector<pair<pair<long long, long long>, long long> > vec;
vector<pair<long long, long long> > temp;
int main() {
  long long n, m, k, x, y, z, res = -1000000000000000ll;
  scanf("%lld %lld %lld", &n, &m, &k);
  for (long long i = 0; i < n; i++)
    scanf("%lld %lld", &x, &y), vec.push_back({{x, -1}, y});
  for (long long i = 1; i <= 1000001; i++)
    upd(1, 1, 1000001, i, -1000000000000000ll);
  for (long long i = 0; i < m; i++)
    scanf("%lld %lld", &x, &y), temp.push_back({x, y});
  sort(temp.begin(), temp.end());
  for (int i = m - 1; i >= 0; i--)
    upd(1, 1, 1000001, temp[i].first, -temp[i].second);
  for (long long i = 0; i < k; i++)
    scanf("%lld %lld %lld", &x, &y, &z), vec.push_back({{x, y}, z});
  sort(vec.begin(), vec.end());
  for (long long i = 1, j = 0; i <= 1000001 && j < vec.size(); i++) {
    while (j < vec.size() && vec[j].first.first == i &&
           vec[j].first.second == -1)
      res = max(res, -vec[j].second + seg[1]), j++;
    while (j < vec.size() && vec[j].first.first == i &&
           vec[j].first.second != -1)
      update(1, 1, 1000001, vec[j].first.second + 1, 1000001, vec[j].second),
          j++;
  }
  printf("%lld\n", res);
  return 0;
}
