#include <bits/stdc++.h>
using namespace std;
const int N = 2e6 + 7;
const int INF = 2e18;
struct node {
  int l = -1, r = -1;
  int add = 0;
  int mx = 0;
};
int n, m, p;
vector<node> t(4 * N);
vector<int> q(N, INF);
void build(int l, int r, int v = 1) {
  t[v].l = l;
  t[v].r = r;
  if (l == r) {
    t[v].mx = -q[l];
    return;
  }
  int m = l + r >> 1;
  build(l, m, 2 * v);
  build(m + 1, r, 2 * v + 1);
  t[v].mx = max(t[2 * v].mx, t[2 * v + 1].mx);
}
void push(int v) {
  if (t[v].add == 0) return;
  t[v].mx += t[v].add;
  if (t[v].l != t[v].r) {
    t[2 * v].add += t[v].add;
    t[2 * v + 1].add += t[v].add;
  }
  t[v].add = 0;
}
void upd(int l, int r, int x, int v = 1) {
  push(v);
  if (t[v].l > r || t[v].r < l) return;
  if (l <= t[v].l && t[v].r <= r) {
    t[v].add += x;
    push(v);
    return;
  }
  upd(l, r, x, 2 * v);
  upd(l, r, x, 2 * v + 1);
  t[v].mx = max(t[2 * v].mx, t[2 * v + 1].mx);
}
signed main() {
  ios ::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m >> p;
  vector<pair<int, int>> a(n);
  for (int i = 0; i < n; i++) cin >> a[i].first >> a[i].second;
  sort(a.begin(), a.end());
  for (int i = 0; i < m; i++) {
    int b, cb;
    cin >> b >> cb;
    q[b] = min(q[b], cb);
  }
  build(0, N - 1);
  vector<pair<int, pair<int, int>>> xyz;
  for (int i = 0; i < p; i++) {
    int x, y, z;
    cin >> x >> y >> z;
    xyz.push_back({x, {y, z}});
  }
  sort(xyz.begin(), xyz.end());
  int l = 0;
  int ans = -INF;
  for (int i = 0; i < n; i++) {
    while (l < p && a[i].first > xyz[l].first) {
      upd(xyz[l].second.first + 1, N - 1, xyz[l].second.second);
      ++l;
    }
    ans = max(ans, -a[i].second + t[1].mx);
  }
  cout << ans << '\n';
}
