#include <bits/stdc++.h>
using namespace std;
const long long MAXN = 200100;
const long long INF = 1e15;
long long N, T, Q, E, a, b, c, d, W, S, P;
long long A[MAXN], B[MAXN];
vector<pair<long long, long long> > weap;
vector<pair<long long, long long> > shield;
struct node {
  int ss, ee, m, v, lazy;
  node *l, *r;
  node(int _s, int _e) : ss(_s), ee(_e) {
    v = -shield[ss].second;
    m = (ss + ee) / 2;
    lazy = 0;
    if (ss != ee) {
      l = new node(ss, m);
      r = new node(m + 1, ee);
      v = max(l->v, r->v);
    }
  }
  void add(int x, int y, int val) {
    if (ss == x && ee == y) {
      lazy += val;
      return;
    }
    if (y <= m)
      l->add(x, y, val);
    else if (x > m)
      r->add(x, y, val);
    else {
      l->add(x, m, val);
      r->add(m + 1, y, val);
    }
    v = max(l->lazy + l->v, r->lazy + r->v);
  }
  long long query() { return v + lazy; }
} * root;
long long ans = -INF;
vector<pair<long long, pair<long long, long long> > > money;
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> W >> S >> P;
  for (int i = 0; i < W; ++i) {
    cin >> a >> b;
    weap.emplace_back(make_pair(a, b));
  }
  sort(weap.begin(), weap.end());
  for (int j = 0; j < S; ++j) {
    cin >> a >> b;
    shield.emplace_back(make_pair(a, b));
  }
  sort(shield.begin(), shield.end());
  for (int i = 0; i < P; ++i) {
    cin >> a >> b >> c;
    money.emplace_back(make_pair(a, make_pair(b, c)));
  }
  sort(money.begin(), money.end());
  reverse(money.begin(), money.end());
  root = new node(0, S - 1);
  for (auto i : weap) {
    while ((long long)money.size() && money.back().first < i.first) {
      pair<long long, pair<long long, long long> > c = money.back();
      money.pop_back();
      int t = upper_bound(shield.begin(), shield.end(),
                          make_pair(c.second.first, (long long)INF)) -
              shield.begin();
      if (t <= S - 1) root->add(t, S - 1, c.second.second);
    }
    ans = max(ans, root->query() - i.second);
  }
  cout << ans;
}
