#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5, M = 1e6 + 5;
struct monster {
  int d, a, z;
  bool operator<(const monster &a) const { return d < a.d; }
} mon[N];
struct segtree {
  long long val;
} t[M * 4];
pair<int, int> w[N];
long long a[M], col[M * 4];
int n, m, p, mxb;
void down(int p) {
  if (col[p]) {
    long long &x = col[p];
    t[(p << 1)].val += x;
    t[(p << 1 | 1)].val += x;
    col[(p << 1)] += x;
    col[(p << 1 | 1)] += x;
    col[p] = 0;
  }
}
void build(int p, int l, int r) {
  if (l == r) return t[p].val = a[l], void();
  int mid = (l + r) >> 1;
  build((p << 1), l, mid);
  build((p << 1 | 1), mid + 1, r);
  t[p].val = max(t[(p << 1)].val, t[(p << 1 | 1)].val);
}
void change(int p, int l, int r, int x, int y, int z) {
  if (x <= l && r <= y) {
    col[p] += z;
    t[p].val += z;
    return;
  }
  down(p);
  int mid = (l + r) >> 1;
  if (x <= mid) change((p << 1), l, mid, x, y, z);
  if (y > mid) change((p << 1 | 1), mid + 1, r, x, y, z);
  t[p].val = max(t[(p << 1)].val, t[(p << 1 | 1)].val);
}
int main() {
  scanf("%d%d%d", &n, &m, &p);
  memset(a, 0xcf, sizeof(a));
  for (int i = 0; i < n; ++i) scanf("%d%d", &w[i].first, &w[i].second);
  for (int i = 0; i < m; ++i) {
    int d;
    long long z;
    scanf("%d%lld", &d, &z);
    a[d] = max(a[d], -z);
    mxb = max(mxb, d);
  }
  for (int i = 0; i < p; ++i) scanf("%d%d%d", &mon[i].d, &mon[i].a, &mon[i].z);
  sort(w, w + n);
  sort(mon, mon + p);
  build(1, 1, mxb);
  long long ans = -1e18;
  for (int i = 0, j = 0; i < n; ++i) {
    while (j < p && mon[j].d < w[i].first) {
      if (mon[j].a < mxb) change(1, 1, mxb, mon[j].a + 1, mxb, mon[j].z);
      j++;
    }
    ans = max(ans, t[1].val - w[i].second);
  }
  printf("%lld\n", ans);
  return 0;
}
