#include <bits/stdc++.h>
constexpr int MAXN = 2e5 + 5;
constexpr int Inf = 0x7fffffff;
using namespace std;
using LL = long long;
template <typename T>
inline void read(T &x) {
  int f = 1;
  x = 0;
  char ch = getchar();
  while (!isdigit(ch)) f = (ch == '-') ? -1 : 1, ch = getchar();
  while (isdigit(ch)) x = x * 10 + ch - 48, ch = getchar();
  x *= f;
}
struct segTree {
  segTree *Lson, *Rson;
  int l, r;
  int max, tag;
} Tree[MAXN << 1];
int tot, n, m, p, ans = -Inf;
vector<pair<int, int> > weapon, armor;
vector<pair<int, pair<int, int> > > vec;
using Node = segTree *;
inline void build(int L, int R, Node root) {
  root->l = L, root->r = R;
  if (L == R) {
    root->max = -armor[L].second;
    return;
  }
  int mid = (L + R) >> 1;
  root->Lson = &Tree[++tot], root->Rson = &Tree[++tot];
  build(L, mid, root->Lson), build(mid + 1, R, root->Rson);
  root->max = max(root->Lson->max, root->Rson->max);
}
inline void pushTag(Node root) {
  if (!root->tag) return;
  root->Lson->tag += root->tag, root->Lson->max += root->tag;
  root->Rson->tag += root->tag, root->Rson->max += root->tag;
  root->tag = 0;
}
inline void change(int L, int R, int val, Node root) {
  if (L <= root->l && root->r <= R) {
    root->max += val, root->tag += val;
    return;
  }
  pushTag(root);
  int mid = (root->l + root->r) >> 1;
  if (L <= mid) change(L, R, val, root->Lson);
  if (R > mid) change(L, R, val, root->Rson);
  root->max = max(root->Lson->max, root->Rson->max);
}
int main() {
  read(n), read(m), read(p);
  for (int i = 0, v, c; i < n; i++)
    read(v), read(c), vec.emplace_back(make_pair(v - 1, make_pair(Inf, c)));
  for (int i = 0, v, c; i < m; i++)
    read(v), read(c), armor.emplace_back(make_pair(v, c));
  sort(armor.begin(), armor.end());
  build(0, m - 1, Tree);
  for (int i = 0, def, atk, c; i < p; i++) {
    read(def), read(atk), read(c);
    vec.emplace_back(make_pair(def, make_pair(atk, c)));
  }
  sort(vec.begin(), vec.end());
  for (auto &i : vec) {
    int x = i.first, y = i.second.first, c = i.second.second;
    if (y == Inf) {
      ans = max(ans, -c + Tree->max);
      continue;
    }
    int pos = upper_bound(armor.begin(), armor.end(), make_pair(y, Inf)) -
              armor.begin();
    if (pos < m) change(pos, m - 1, c, Tree);
  }
  cout << ans << endl;
  return 0;
}
