#include <bits/stdc++.h>
using namespace std;
int dx[4] = {1, -1, 0, 0};
int dy[4] = {0, 0, 1, -1};
long long gcd(long long a, long long b) {
  for (; b; a %= b, swap(a, b))
    ;
  return a;
}
const int N = 200001;
int n, m, p;
pair<long long, long long> A[N], W[N];
pair<pair<long long, long long>, long long> M[N];
long long segTree[N * 4], lazy[N * 4];
void setLazy(int ptr, int s, int e) {
  long long val = lazy[ptr];
  segTree[ptr] += val;
  if (s != e) {
    lazy[ptr * 2] += val;
    lazy[ptr * 2 + 1] += val;
  }
  lazy[ptr] = 0;
}
void update(int ptr, int s, int e, int l, int r, long long val) {
  if (lazy[ptr]) setLazy(ptr, s, e);
  if (r < s || e < l) return;
  if (l <= s && e <= r) {
    segTree[ptr] += val;
    if (s != e) {
      lazy[ptr * 2] += val;
      lazy[ptr * 2 + 1] += val;
    }
    return;
  }
  update(ptr * 2, s, (s + e) / 2, l, r, val);
  update(ptr * 2 + 1, (s + e) / 2 + 1, e, l, r, val);
  segTree[ptr] = max(segTree[ptr * 2], segTree[ptr * 2 + 1]);
}
long long getVal(int ptr, int s, int e, int l, int r) {
  if (lazy[ptr]) setLazy(ptr, s, e);
  if (r < s || e < l) return -1e18;
  if (l <= s && e <= r) return segTree[ptr];
  return max(getVal(ptr * 2, s, (s + e) / 2, l, r),
             getVal(ptr * 2 + 1, (s + e) / 2 + 1, e, l, r));
}
vector<int> aIdx;
int getIdx(long long x) {
  return lower_bound(aIdx.begin(), aIdx.end(), x) - aIdx.begin();
}
int main(void) {
  ios::sync_with_stdio(0);
  cin.tie(0), cout.tie(0);
  cin >> n >> m >> p;
  for (int i = 0; i < n; i++) cin >> W[i].first >> W[i].second;
  for (int i = 0; i < m; i++) cin >> A[i].first >> A[i].second;
  for (int i = 0; i < p; i++)
    cin >> M[i].first.first >> M[i].first.second >> M[i].second;
  sort(M, M + p);
  for (int i = 0; i < m; i++) aIdx.push_back(A[i].first);
  sort(aIdx.begin(), aIdx.end());
  aIdx.erase(unique(aIdx.begin(), aIdx.end()), aIdx.end());
  sort(A, A + m);
  for (int i = 0; i < m; i++) {
    if (i > 0 && A[i].first == A[i - 1].first) continue;
    int idx = getIdx(A[i].first);
    update(1, 0, aIdx.size() - 1, idx, idx, -A[i].second);
  }
  m = aIdx.size();
  sort(W, W + n);
  long long ans = -1e18;
  int ptr = 0;
  for (int i = 0; i < n; i++) {
    long long atk = W[i].first;
    long long cost = W[i].second;
    while (ptr < p && M[ptr].first.first < atk) {
      long long m_def = M[ptr].first.second;
      long long m_coin = M[ptr].second;
      int idx = upper_bound(aIdx.begin(), aIdx.end(), m_def) - aIdx.begin();
      update(1, 0, aIdx.size() - 1, idx, m - 1, m_coin);
      ptr++;
    }
    long long res = getVal(1, 0, m - 1, 0, m - 1) - cost;
    ans = max(ans, res);
  }
  cout << ans;
}
