#include <bits/stdc++.h>
using namespace std;
const int SZ = 1 << 18;
vector<pair<int, int>> A, B, T, U[200001];
long long tree[2 * SZ], lazy[2 * SZ];
void lazy_propagation(int bit, int s, int e) {
  tree[bit] += lazy[bit];
  if (s < e) {
    lazy[2 * bit] += lazy[bit];
    lazy[2 * bit + 1] += lazy[bit];
  }
  lazy[bit] = 0;
}
void add_tree(int n1, int n2, int v, int bit = 1, int s = 0, int e = SZ - 1) {
  int m = (s + e) >> 1;
  lazy_propagation(bit, s, e);
  if (n2 < n1 || n2 < s || e < n1) return;
  if (n1 <= s && e <= n2) {
    lazy[bit] = v;
    lazy_propagation(bit, s, e);
    return;
  }
  add_tree(n1, n2, v, 2 * bit, s, m);
  add_tree(n1, n2, v, 2 * bit + 1, m + 1, e);
  tree[bit] = max(tree[2 * bit], tree[2 * bit + 1]);
}
long long get_max(int n1, int n2, int bit = 1, int s = 0, int e = SZ - 1) {
  int m = (s + e) >> 1;
  if (n2 < n1 || n2 < s || e < n1) return -0x7fffffffffffffffLL;
  lazy_propagation(bit, s, e);
  if (n1 <= s && e <= n2) return tree[bit];
  return max(get_max(n1, n2, 2 * bit, s, m),
             get_max(n1, n2, 2 * bit + 1, m + 1, e));
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  ((void)0);
  ((void)0);
  ((void)0);
  int N, M, P;
  long long ans = -0x7fffffffffffffffLL;
  cin >> N >> M >> P;
  T.resize(N);
  for (auto &[a, ca] : T) cin >> a >> ca;
  sort(T.begin(), T.end());
  for (int i = 0; i < N; i++) {
    while (A.size() && A.back().second >= T[i].second) A.pop_back();
    if (A.empty() || A.back().first < T[i].first) A.push_back(T[i]);
  }
  T.resize(M);
  for (auto &[b, cb] : T) cin >> b >> cb;
  sort(T.begin(), T.end());
  for (int i = 0; i < M; i++) {
    while (B.size() && B.back().second >= T[i].second) B.pop_back();
    if (B.empty() || B.back().first < T[i].first) B.push_back(T[i]);
  }
  for (int i = 0; i < P; i++) {
    int x, y, z;
    cin >> x >> y >> z;
    x = upper_bound(A.begin(), A.end(), make_pair(x, 0x7fffffff)) - A.begin();
    if (x == A.size()) continue;
    y = upper_bound(B.begin(), B.end(), make_pair(y, 0x7fffffff)) - B.begin();
    if (y == B.size()) continue;
    U[x].emplace_back(y, z);
  }
  memset(tree, 0x80, sizeof(tree));
  for (int i = 0; i < B.size(); i++) tree[SZ + i] = -B[i].second;
  for (int i = SZ; --i;) tree[i] = max(tree[2 * i], tree[2 * i + 1]);
  for (int i = 0; i < A.size(); i++) {
    for (auto [n, v] : U[i]) add_tree(n, B.size() - 1, v);
    ans = max(ans, tree[1] - A[i].second);
  }
  cout << ans << '\n';
  return 0;
}
