#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  char c = getchar();
  long long tot = 1;
  while ((c < '0' || c > '9') && c != '-') c = getchar();
  if (c == '-') {
    tot = -1;
    c = getchar();
  }
  long long sum = 0;
  while (c >= '0' && c <= '9') {
    sum = sum * 10 + c - '0';
    c = getchar();
  }
  return sum * tot;
}
inline void wr(long long x) {
  if (x < 0) {
    putchar('-');
    wr(-x);
    return;
  }
  if (x >= 10) wr(x / 10);
  putchar(x % 10 + '0');
}
inline void wrn(long long x) {
  wr(x);
  putchar('\n');
}
inline void wri(long long x) {
  wr(x);
  putchar(' ');
}
long long nedge, Next[300005 * 2], head[300005], to[300005 * 2],
    lon[300005 * 2];
void add(long long a, long long b, long long c) {
  nedge++;
  Next[nedge] = head[a];
  head[a] = nedge;
  to[nedge] = b;
  lon[nedge] = c;
}
long long c, f[300005], q, n, m, b[300005], x, y, a[300005];
struct tree1 {
  long long l, r;
  long long num, min;
} tree[300005 * 4];
struct heap {
  priority_queue<long long, vector<long long>, greater<long long> > p1, p2;
  inline void erase(long long x) { p2.push(x); }
  inline void push(long long x) { p1.push(x); }
  inline long long top() {
    while (!p2.empty() && p1.top() == p2.top()) p1.pop(), p2.pop();
    return p1.top();
  }
} p;
void build(long long x, long long l, long long r) {
  tree[x].l = l;
  tree[x].r = r;
  if (l == r) {
    tree[x].min = b[l];
    return;
  }
  long long mid = (l + r) >> 1;
  build(x * 2, l, mid);
  build(x * 2 + 1, mid + 1, r);
  tree[x].min = min(tree[x * 2].min, tree[x * 2 + 1].min);
}
void add(long long x, long long l, long long r, long long p) {
  if (tree[x].l == l && r == tree[x].r) {
    tree[x].num += p;
    return;
  }
  long long mid = (tree[x].l + tree[x].r) >> 1;
  if (r <= mid)
    add(x * 2, l, r, p);
  else if (l > mid)
    add(x * 2 + 1, l, r, p);
  else
    add(x * 2, l, mid, p), add(x * 2 + 1, mid + 1, r, p);
  tree[x].min = min(tree[x * 2].min + tree[x * 2].num,
                    tree[x * 2 + 1].min + tree[x * 2 + 1].num);
}
signed main() {
  n = read();
  m = read();
  q = read();
  for (long long i = 1; i < n; i++) {
    a[i] = read();
    b[n - i] = read();
  }
  for (long long i = 1; i <= m; i++) {
    x = read();
    y = read();
    c = read();
    add(x, n - y + 1, c);
  }
  build(1, 1, n);
  for (long long i = 1; i <= n; i++) {
    for (long long j = head[i]; j; j = Next[j]) {
      add(1, to[j], n, lon[j]);
    }
    f[i] = tree[1].min + tree[1].num;
    p.push(a[i] + f[i]);
  }
  wrn(p.top());
  for (long long i = 1; i <= q; i++) {
    x = read();
    y = read();
    p.erase(a[x] + f[x]);
    a[x] = y;
    p.push(a[x] + f[x]);
    wrn(p.top());
  }
  return 0;
}
