#include <bits/stdc++.h>
using namespace std;
const int maxN = 2e6 + 10, lim = 2e6;
const int inf = 2e9;
struct Segment {
  int num, lazy;
} tree[maxN * 4 + 1];
struct Node {
  int a, b, c;
} A[maxN + 1], B[maxN + 1];
int n, m, k;
int ans, val[maxN + 1];
inline int read() {
  int num = 0, f = 1;
  char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (isdigit(ch)) num = (num << 3) + (num << 1) + (ch ^ 48), ch = getchar();
  return num * f;
}
inline bool comp(Node a, Node b) { return a.a < b.a; }
inline void pushup(int node) {
  tree[node].num = max(tree[node << 1].num, tree[node << 1 | 1].num);
}
inline void pushdown(int node) {
  int num = tree[node].lazy;
  tree[node].lazy = 0;
  tree[node << 1].num += num;
  tree[node << 1].lazy += num;
  tree[node << 1 | 1].num += num;
  tree[node << 1 | 1].lazy += num;
}
inline void build(int node, int l, int r) {
  tree[node].lazy = 0;
  if (l == r) {
    tree[node].num = val[l];
    return;
  }
  int mid = (l + r) >> 1;
  build(node << 1, l, mid);
  build(node << 1 | 1, mid + 1, r);
  pushup(node);
}
inline void change(int node, int l, int r, int x, int y, int num) {
  if (x <= l && r <= y) {
    tree[node].num += num;
    tree[node].lazy += num;
    return;
  }
  if (tree[node].lazy) pushdown(node);
  int mid = (l + r) >> 1;
  if (x <= mid) change(node << 1, l, mid, x, y, num);
  if (y > mid) change(node << 1 | 1, mid + 1, r, x, y, num);
  pushup(node);
}
int main() {
  n = read(), k = read(), m = read();
  for (int i = 1; i <= n; i++) A[i].a = read(), A[i].c = read();
  for (int i = 0; i <= lim + 1; i++) val[i] = -inf;
  for (int i = 1; i <= k; i++) {
    int x = read(), y = read();
    val[x] = max(val[x], -y);
  }
  for (int i = 1; i <= m; i++)
    B[i].a = read(), B[i].b = read(), B[i].c = read();
  sort(A + 1, A + n + 1, comp);
  sort(B + 1, B + m + 1, comp);
  build(1, 1, lim);
  ans = -inf;
  int now = 1;
  for (int i = 1; i <= n; i++) {
    while (now <= m && B[now].a < A[i].a)
      change(1, 1, lim, B[now].b + 1, lim, B[now].c), now++;
    ans = max(ans, -A[i].c + tree[1].num);
  }
  printf("%d", ans);
  return 0;
}
