#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#pragma comment(linker, "/STACK:2000000")
using namespace std;
using ll = long long;
using db = long double;
using ii = pair<int, int>;
const int N = 2e5 + 5, LG = 19, MOD = 998244353;
const int SQ = 320;
const long double EPS = 1e-7;
vector<ii> atk, def;
vector<vector<int>> mons;
int n, m, p;
int t[4000005];
int lz[4000005];
bool in[4000005];
void push(int node, int s, int e) {
  t[node] += lz[node];
  if (s != e) {
    lz[node << 1] += lz[node];
    lz[node << 1 | 1] += lz[node];
  }
  lz[node] = 0;
}
void updI(int node, int s, int e, int idx, int v) {
  if (s == e) {
    t[node] = v;
    return;
  }
  int md = (s + e) >> 1;
  if (idx <= md)
    updI(node << 1, s, md, idx, v);
  else
    updI(node << 1 | 1, md + 1, e, idx, v);
  t[node] = max(t[node << 1], t[node << 1 | 1]);
}
void upd(int node, int s, int e, int l, int r, int v) {
  push(node, s, e);
  if (r < s || e < l || l > r) return;
  if (l <= s && e <= r) {
    lz[node] += v;
    push(node, s, e);
    return;
  }
  int md = (s + e) >> 1;
  upd(node << 1, s, md, l, r, v);
  upd(node << 1 | 1, md + 1, e, l, r, v);
  t[node] = max(t[node << 1], t[node << 1 | 1]);
}
int32_t main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m >> p;
  atk.resize(n);
  def.resize(m);
  mons = vector<vector<int>>(p, vector<int>(3));
  for (int i = 0; i < n; i++) cin >> atk[i].first >> atk[i].second;
  for (int i = 0; i < m; i++) cin >> def[i].first >> def[i].second;
  for (int i = 0; i < p; i++)
    for (int j = 0; j < 3; j++) cin >> mons[i][j];
  sort(atk.begin(), atk.end());
  sort(def.begin(), def.end());
  sort(mons.begin(), mons.end());
  fill(t, t + 4000000, -2e9);
  vector<ii> vp;
  for (auto x : def) {
    if (vp.empty() || x.first != vp.back().first) vp.push_back(x);
  }
  def = vp;
  const int MX = 1e6;
  for (auto x : def) updI(1, 0, MX, x.first, -x.second);
  int ans = INT_MIN;
  for (int i = 0, j = 0; i < n; i++) {
    while (j < p && mons[j][0] < atk[i].first) {
      upd(1, 0, MX, mons[j][1] + 1, MX, mons[j][2]);
      j++;
    }
    ans = max(ans, t[1] - atk[i].second);
  }
  cout << ans << '\n';
  return 0;
}
