#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
int tree[N * 4], lazy[N * 4];
void build(int node, int l, int r, vector<pair<int, int> > &v) {
  if (l == r) {
    tree[node] = -v[l].second;
    return;
  }
  int mid = l + r >> 1;
  build(node << 1, l, mid, v);
  build(node << 1 | 1, mid + 1, r, v);
  tree[node] = max(tree[node << 1], tree[node << 1 | 1]);
}
void update(int node, int l, int r, int p, int val) {
  if (r < p) return;
  if (l >= p) {
    lazy[node] += val;
    tree[node] += val;
    return;
  }
  int mid = l + r >> 1;
  update(node << 1, l, mid, p, val);
  update(node << 1 | 1, mid + 1, r, p, val);
  tree[node] = lazy[node] + max(tree[node << 1], tree[node << 1 | 1]);
}
int main() {
  int n, m, p;
  scanf("%d%d%d", &n, &m, &p);
  vector<pair<int, int> > a(n), b(m);
  vector<pair<pair<int, int>, int> > c(p);
  for (int i = 0; i < n; i++) scanf("%d%d", &a[i].first, &a[i].second);
  for (int i = 0; i < m; i++) scanf("%d%d", &b[i].first, &b[i].second);
  for (int i = 0; i < p; i++)
    scanf("%d%d%d", &c[i].first.first, &c[i].first.second, &c[i].second);
  sort(a.begin(), a.end());
  sort(b.begin(), b.end());
  sort(c.begin(), c.end());
  build(1, 0, m - 1, b);
  int ans = -2e9;
  for (int i = 0, j = 0; i < n; i++) {
    while (j < p && c[j].first.first < a[i].first) {
      int k = upper_bound(b.begin(), b.end(),
                          pair<int, int>(c[j].first.second, 1e9)) -
              b.begin();
      update(1, 0, m - 1, k, c[j].second);
      j++;
    }
    ans = max(ans, tree[1] - a[i].second);
  }
  printf("%d\n", ans);
  return 0;
}
