#include <bits/stdc++.h>
using namespace std;
constexpr int maxn = 1e6 + 100;
int read() {
  int x = 0;
  char c = getchar();
  while (!isdigit(c)) c = getchar();
  while (isdigit(c)) x = x * 10 + c - '0', c = getchar();
  return x;
}
const int lim = 1e6 + 5;
namespace st {
int v[maxn << 2], mark[maxn << 2];
void pushup(const int x) { v[x] = max(v[(x << 1)], v[(x << 1 | 1)]); }
void pushdown(const int x) {
  v[(x << 1)] += mark[x];
  v[(x << 1 | 1)] += mark[x];
  mark[(x << 1)] += mark[x];
  mark[(x << 1 | 1)] += mark[x];
  mark[x] = 0;
}
void build(const int l = 1, const int r = lim, const int x = 1) {
  v[x] = -0x7fffffff;
  if (l == r) return;
  const int mid = (l + r) >> 1;
  build(l, mid, (x << 1));
  build(mid + 1, r, (x << 1 | 1));
}
void set(const int p, const int v, const int l = 1, const int r = lim,
         const int x = 1) {
  if (l == r) {
    st::v[x] = max(st::v[x], v);
    return;
  }
  const int mid = (l + r) >> 1;
  if (p <= mid)
    set(p, v, l, mid, (x << 1));
  else
    set(p, v, mid + 1, r, (x << 1 | 1));
  pushup(x);
}
void modify(const int a, const int b, const int delta, const int l = 1,
            const int r = lim, const int x = 1) {
  if (a <= l && b >= r) {
    v[x] += delta;
    mark[x] += delta;
    return;
  }
  pushdown(x);
  const int mid = (l + r) >> 1;
  if (a <= mid) modify(a, b, delta, l, mid, (x << 1));
  if (b >= mid + 1) modify(a, b, delta, mid + 1, r, (x << 1 | 1));
  pushup(x);
}
}  // namespace st
int n, m, p, f[maxn];
pair<int, int> weapon[maxn], armor[maxn];
struct mpair {
  int first, second, v;
  bool operator<(const mpair &rhs) const { return first < rhs.first; };
} monster[maxn];
void solve() {
  n = read(), m = read(), p = read();
  for (int i = 1; i <= n; i++)
    weapon[i].first = read(), weapon[i].second = read();
  for (int i = 1; i <= m; i++)
    armor[i].first = read(), armor[i].second = read();
  for (int i = 1; i <= p; i++)
    monster[i].first = read(), monster[i].second = read(),
    monster[i].v = read();
  sort(weapon + 1, weapon + 1 + n);
  sort(armor + 1, armor + 1 + m);
  sort(monster + 1, monster + 1 + p);
  st::build();
  for (int i = 1; i <= m; i++) st::set(armor[i].first, -armor[i].second);
  for (int i = 1; i <= p; i++) {
    st::modify(monster[i].second + 1, lim, monster[i].v);
    f[i] = st::v[1];
  }
  f[0] = -0x7fffffff;
  for (int i = 1; i <= m; i++) f[0] = max(f[0], -armor[i].second);
  int ans = -0x7fffffff;
  for (int i = 1; i <= n; i++) {
    const int x = prev(lower_bound(monster + 1, monster + 1 + p,
                                   mpair{weapon[i].first, 0})) -
                  monster;
    ans = max(ans, f[x] - weapon[i].second);
  }
  printf("%d\n", ans);
}
int main() {
  solve();
  return 0;
}
