#include <bits/stdc++.h>
using namespace std;
using LL = long long;
const LL INF = 1000000000000000000;
class SegTree {
 public:
  SegTree(int _n) : n(_n) {
    y = vector<LL>(_n + 1);
    sum = vector<LL>(_n * 4);
    ans = vector<LL>(_n * 4);
  }
  void Build(int t, int l, int r) {
    if (l == r) {
      ans[t] = y[l];
      return;
    }
    int mid = (l + r) >> 1;
    Build(t + t, l, mid);
    Build(t + t + 1, mid + 1, r);
    ans[t] = max(ans[t + t], ans[t + t + 1]);
  }
  void Insert(int t, LL a, int l, int r, int p) {
    if (l == r) {
      sum[t] += a;
      ans[t] += a;
      return;
    }
    int mid = (l + r) >> 1;
    if (p <= mid) {
      Insert(t + t, a, l, mid, p);
    } else {
      Insert(t + t + 1, a, mid + 1, r, p);
    }
    sum[t] = sum[t + t] + sum[t + t + 1];
    ans[t] = max(ans[t + t], ans[t + t + 1] + sum[t + t]);
  }
  LL Query() { return ans[1]; }
  int n;
  vector<LL> y;
  vector<LL> sum;
  vector<LL> ans;
};
struct Node {
  int x, y, z;
  bool operator<(const Node& t) const { return x < t.x; }
};
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n, m, p;
  cin >> n >> m >> p;
  vector<pair<int, int>> a(n), b(m);
  for (int i = 0; i < n; ++i) {
    cin >> a[i].first >> a[i].second;
    ++a[i].first;
  }
  for (int i = 0; i < m; ++i) {
    cin >> b[i].first >> b[i].second;
    ++b[i].first;
  }
  vector<Node> c(p);
  for (int i = 0; i < p; ++i) {
    cin >> c[i].x >> c[i].y >> c[i].z;
    ++c[i].x;
    ++c[i].y;
  }
  sort(a.begin(), a.end());
  sort(b.begin(), b.end());
  int mincostb = b[m - 1].second;
  for (int i = m - 1; i >= 0; --i) {
    b[i].second = min(b[i].second, mincostb);
    mincostb = min(b[i].second, mincostb);
  }
  SegTree tree(1000001);
  for (int i = 0; i < m; ++i) {
    int j = b[i].first - 1;
    while (j >= 1 && tree.y[j] == 0) {
      tree.y[j] = -b[i].second;
      --j;
    }
  }
  for (int j = 1000001; j >= 1; --j) {
    if (tree.y[j] != 0) break;
    tree.y[j] = -INF;
  }
  tree.Build(1, 1, 1000001);
  sort(c.begin(), c.end());
  int j = 0;
  LL ans = -INF;
  for (int i = 0; i < n; ++i) {
    while (j < p && c[j].x < a[i].first) {
      tree.Insert(1, c[j].z, 1, 1000001, c[j].y);
      ++j;
    }
    ans = max(ans, (LL)-a[i].second + tree.Query());
  }
  cout << ans << endl;
  return 0;
}
