#include <bits/stdc++.h>
using namespace std;
const long long MAX = (long long)3e2;
long long inf = (long long)1e12;
long long n, m, p;
vector<pair<long long, long long>> harm;
vector<pair<pair<long long, long long>, long long>> hp;
long long getind(long long num) {
  long long uk1 = 0, uk2 = n + 1;
  while (uk2 - uk1 > 1) {
    long long mid = (uk2 + uk1) / 2;
    if (harm[mid].first > num)
      uk2 = mid;
    else
      uk1 = mid;
  }
  return uk2;
}
struct node {
  long long mid, bl, br, ad, maxi;
  node* sonl;
  node* sonr;
  node(long long l, long long r) {
    bl = l;
    br = r;
    ad = 0;
    maxi = -inf;
    mid = (r + l) / 2;
  }
};
struct segtree {
  node* dad;
  segtree(long long a, long long b) { dad = new node(a, b); }
  void push(node* root) {
    if (root->bl == root->br) {
      root->maxi += root->ad;
      root->ad = 0;
    } else {
      root->sonl->ad += root->ad;
      root->sonr->ad += root->ad;
      root->ad = 0;
    }
  }
  void build(node* root) {
    if (root->bl == root->br) {
      root->maxi = -harm[root->bl].second;
    } else {
      root->sonl = new node(root->bl, root->mid);
      root->sonr = new node(root->mid + 1, root->br);
      build(root->sonl);
      build(root->sonr);
      root->maxi = max(root->sonl->maxi, root->sonr->maxi);
    }
  }
  void plus(node* root, long long l, long long r, long long num) {
    if (l > r)
      return;
    else if (root->bl == l && root->br == r) {
      root->ad += num;
    } else {
      push(root);
      plus(root->sonl, l, min(r, root->mid), num);
      plus(root->sonr, max(l, root->mid + 1), r, num);
      root->maxi = max(root->sonl->maxi + root->sonl->ad,
                       root->sonr->maxi + root->sonr->ad);
    }
  }
  long long getmaxi(node* root) { return root->maxi + root->ad; }
};
int main() {
  ios::sync_with_stdio(0);
  cin >> n >> m >> p;
  for (int i = 0; i < n; i++) {
    long long a, b;
    cin >> a >> b;
    harm.push_back({a, b});
  }
  harm.push_back({0, 0});
  sort(harm.begin(), harm.end());
  for (int i = 0; i < m; i++) {
    long long a, b;
    cin >> a >> b;
    hp.push_back({{a, -inf}, b});
  }
  for (int i = 0; i < p; i++) {
    long long a, b, c;
    cin >> a >> b >> c;
    hp.push_back({{b, a}, c});
  }
  long long ans = -inf;
  sort(hp.begin(), hp.end());
  segtree t = segtree(1, n);
  t.build(t.dad);
  for (int i = 0; i < hp.size(); i++) {
    if (hp[i].first.second == -inf)
      ans = max(ans, t.getmaxi(t.dad) - hp[i].second);
    else {
      long long ind = getind(hp[i].first.second);
      t.plus(t.dad, ind, n, hp[i].second);
    }
  }
  cout << ans;
  return 0;
}
