#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int maxn = 2e5 + 5;
int ca[maxn];
long long f[maxn * 4], ly[maxn * 4], cb[maxn], cc[maxn];
struct edge {
  int u, v, w;
} g[maxn];
bool cmp(const edge &a, const edge &b) { return a.u < b.u; }
void push_down(int t) {
  if (ly[t]) {
    f[t << 1] += ly[t];
    ly[t << 1] += ly[t];
    f[t << 1 | 1] += ly[t];
    ly[t << 1 | 1] += ly[t];
    ly[t] = 0;
  }
}
void build(int t, int l, int r, long long val[]) {
  ly[t] = 0;
  if (l == r) {
    f[t] = val[l];
    return;
  }
  int mid = (l + r) >> 1;
  build(t << 1, l, mid, val);
  build(t << 1 | 1, mid + 1, r, val);
  f[t] = min(f[t << 1], f[t << 1 | 1]);
}
void update(int t, int l, int r, int ll, int rr, long long v) {
  if (ll <= l && r <= rr) {
    f[t] += v;
    ly[t] += v;
    return;
  }
  int mid = (l + r) >> 1;
  push_down(t);
  if (ll <= mid) update(t << 1, l, mid, ll, rr, v);
  if (rr > mid) update(t << 1 | 1, mid + 1, r, ll, rr, v);
  f[t] = min(f[t << 1], f[t << 1 | 1]);
}
int main() {
  int n, m, q, i, j;
  scanf("%d%d%d", &n, &m, &q);
  for (i = 1; i < n; i++) scanf("%d%lld", &ca[i], &cb[i + 1]);
  build(1, 1, n, cb);
  for (i = 0; i < m; i++) scanf("%d%d%d", &g[i].u, &g[i].v, &g[i].w);
  sort(g, g + m, cmp);
  for (i = 1, j = 0; i <= n; i++) {
    while (j < m && g[j].u == i) {
      update(1, 1, n, 1, g[j].v, g[j].w);
      j++;
    }
    cc[i] = f[1] + ca[i];
  }
  build(1, 1, n, cc);
  printf("%lld\n", f[1]);
  while (q--) {
    scanf("%d%d", &i, &j);
    update(1, 1, n, i, i, j - ca[i]);
    ca[i] = j;
    printf("%lld\n", f[1]);
  }
  return 0;
}
