#include <bits/stdc++.h>
using namespace std;
struct node {
  long long s, e;
  long long mn, mx, sum;
  bool lset;
  long long add_val, set_val;
  node *l, *r;
  node(long long _s, long long _e, long long A[] = NULL)
      : s(_s),
        e(_e),
        mn(0),
        mx(0),
        sum(0),
        lset(0),
        add_val(0),
        set_val(0),
        l(NULL),
        r(NULL) {
    if (A == NULL) return;
    if (s == e)
      mn = mx = sum = A[s];
    else {
      l = new node(s, (s + e) >> 1, A), r = new node((s + e + 2) >> 1, e, A);
      combine();
    }
  }
  void create_children() {
    if (s == e) return;
    if (l != NULL) return;
    long long m = (s + e) >> 1;
    l = new node(s, m);
    r = new node(m + 1, e);
  }
  void self_set(long long v) {
    lset = 1;
    mn = mx = set_val = v;
    sum = v * (e - s + 1);
    add_val = 0;
  }
  void self_add(long long v) {
    if (lset) {
      self_set(v + set_val);
      return;
    }
    mn += v, mx += v, add_val += v;
    sum += v * (e - s + 1);
  }
  void lazy_propagate() {
    if (s == e) return;
    if (lset) {
      l->self_set(set_val), r->self_set(set_val);
      lset = set_val = 0;
    }
    if (add_val != 0) {
      l->self_add(add_val), r->self_add(add_val);
      add_val = 0;
    }
  }
  void combine() {
    if (l == NULL) return;
    sum = l->sum + r->sum;
    mn = min(l->mn, r->mn);
    mx = max(l->mx, r->mx);
  }
  void add(long long x, long long y, long long v) {
    if (s == x && e == y) {
      self_add(v);
      return;
    }
    long long m = (s + e) >> 1;
    create_children();
    lazy_propagate();
    if (x <= m) l->add(x, min(y, m), v);
    if (y > m) r->add(max(x, m + 1), y, v);
    combine();
  }
  void set(long long x, long long y, long long v) {
    if (s == x && e == y) {
      self_set(v);
      return;
    }
    long long m = (s + e) >> 1;
    create_children();
    lazy_propagate();
    if (x <= m) l->set(x, min(y, m), v);
    if (y > m) r->set(max(x, m + 1), y, v);
    combine();
  }
  long long range_sum(long long x, long long y) {
    if (s == x && e == y) return sum;
    if (l == NULL || lset) return (sum / (e - s + 1)) * (y - x + 1);
    long long m = (s + e) >> 1;
    lazy_propagate();
    if (y <= m) return l->range_sum(x, y);
    if (x > m) return r->range_sum(x, y);
    return l->range_sum(x, m) + r->range_sum(m + 1, y);
  }
  long long range_min(long long x, long long y) {
    if (s == x && e == y) return mn;
    if (l == NULL || lset) return mn;
    long long m = (s + e) >> 1;
    lazy_propagate();
    if (y <= m) return l->range_min(x, y);
    if (x > m) return r->range_min(x, y);
    return min(l->range_min(x, m), r->range_min(m + 1, y));
  }
  long long range_max(long long x, long long y) {
    if (s == x && e == y) return mx;
    if (l == NULL || lset) return mx;
    long long m = (s + e) >> 1;
    lazy_propagate();
    if (y <= m) return l->range_max(x, y);
    if (x > m) return r->range_max(x, y);
    return max(l->range_max(x, m), r->range_max(m + 1, y));
  }
  ~node() {
    if (l != NULL) delete l;
    if (r != NULL) delete r;
  }
} * root;
void out(pair<pair<long long, long long>, long long> a) {}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long n, m, k;
  cin >> n >> m >> k;
  vector<pair<long long, long long> > wp;
  vector<pair<long long, long long> > ar;
  long long arst[m], arcost[m];
  vector<pair<pair<long long, long long>, long long> > ms;
  for (long long i = 0; i < n; i++) {
    long long av, ac;
    cin >> av >> ac;
    wp.push_back(make_pair(av, ac));
  }
  for (long long i = 0; i < m; i++) {
    long long dv, dc;
    cin >> dv >> dc;
    ar.push_back(make_pair(dv, dc));
  }
  for (long long i = 0; i < k; i++) {
    long long a, d, c;
    cin >> d >> a >> c;
    ms.push_back(make_pair(make_pair(d, a), c));
  }
  sort(wp.begin(), wp.end());
  sort(ar.begin(), ar.end());
  sort(ms.begin(), ms.end());
  for (long long i = 0; i < m; i++) {
    arcost[i] = -ar[i].second;
    arst[i] = ar[i].first;
  }
  for (int i = m - 2; i >= 0; i--) arcost[i] = max(arcost[i], arcost[i + 1]);
  for (int i = n - 2; i >= 0; i--)
    wp[i].second = min(wp[i].second, wp[i + 1].second);
  root = new node(0, m - 1, arcost);
  long long mo = 0;
  long long best = LLONG_MIN;
  for (long long i = 0; i < n; i++) {
    long long at = wp[i].first;
    long long co = wp[i].second;
    while (mo < k && ms[mo].first.first < at) {
      long long att = ms[mo].first.second;
      long long pos = upper_bound(arst, arst + m, att) - arst;
      if (pos <= m - 1) root->add(pos, m - 1, ms[mo].second);
      mo++;
    }
    best = max(best, root->range_max(0, m - 1) - co);
  }
  cout << best << endl;
}
