#include <bits/stdc++.h>
using namespace std;
long long n, j, m, p, mxDef = -1e18, ans = -1e18, xx = 1e18, yy = 1e18,
                      def[1000005], seg[1000005 * 4], lazy[4 * 1000005];
vector<pair<long long, long long> > att;
vector<pair<pair<long long, long long>, long long> > mon;
void build(int node, int st, int en) {
  if (st == en) {
    seg[node] = def[st];
    return;
  }
  int mid = (st + en) / 2;
  build(2 * node, st, mid);
  build(2 * node + 1, mid + 1, en);
  seg[node] = max(seg[2 * node], seg[2 * node + 1]);
}
void pre() {
  sort(att.begin(), att.end());
  sort(mon.begin(), mon.end());
  for (int i = (int)att.size() - 2; i >= 0; i--) {
    att[i].second = min(att[i].second, att[i + 1].second);
  }
  build(1, 1, 1000000);
}
void probagate(int node, int st, int en) {
  if (lazy[node] != 0) {
    seg[node] += lazy[node];
    if (st != en) {
      lazy[2 * node] += lazy[node];
      lazy[2 * node + 1] += lazy[node];
    }
    lazy[node] = 0;
  }
}
void update(int node, int st, int en, int l, int r, long long val) {
  probagate(node, st, en);
  if (st > en || st > r || en < l) return;
  if (st >= l && en <= r) {
    lazy[node] += val;
    return probagate(node, st, en);
  }
  int mid = (st + en) / 2;
  update(2 * node, st, mid, l, r, val);
  update(2 * node + 1, mid + 1, en, l, r, val);
  seg[node] = max(seg[2 * node], seg[2 * node + 1]);
}
void yalla(long long tmp) {
  for (j; j < mon.size() && mon[j].first.first < tmp; j++) {
    long long d = mon[j].first.second, coins = mon[j].second;
    update(1, 1, 1000000, d + 1, 1000000, coins);
    probagate(1, 1, 1000000);
    mxDef = seg[1];
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m >> p;
  for (int i = 0; i <= 1000001; i++) def[i] = -1e18;
  for (int i = 1; i <= n; i++) {
    long long a, c;
    cin >> a >> c;
    xx = min(xx, c);
    att.push_back({a, c});
  }
  for (int i = 1; i <= m; i++) {
    long long a, c;
    cin >> a >> c;
    yy = min(yy, c);
    def[a] = max(def[a], -c);
  }
  for (int i = 1; i <= p; i++) {
    int x, y, c;
    cin >> x >> y >> c;
    mon.push_back({{x, y}, c});
  }
  pre();
  ans = -(xx + yy);
  for (int i = 0; i < att.size(); i++) {
    yalla(att[i].first);
    ans = max(ans, mxDef - att[i].second);
  }
  cout << ans << "\n";
  return 0;
}
