#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
const long long INF = 1e16;
struct edge {
  int nxt, to, cap;
} e[N];
int fir[N], cnt = 0;
int A[N], B[N];
int n, m, q;
long long key[N << 2], lazy[N << 2], tab[N];
inline void addedge(int x, int y, int c) {
  e[++cnt] = (edge){fir[x], y, c};
  fir[x] = cnt;
}
inline void Down(int x) {
  if (!lazy[x]) return;
  key[x << 1] += lazy[x];
  key[x << 1 | 1] += lazy[x];
  lazy[x << 1] += lazy[x];
  lazy[x << 1 | 1] += lazy[x];
  lazy[x] = 0;
}
inline void Modify(int p, long long val, int x = 1, int L = 1, int R = n + 1) {
  if (L == R) {
    key[x] = val;
    return;
  }
  Down(x);
  if (p <= ((L + R) >> 1))
    Modify(p, val, x << 1, L, ((L + R) >> 1));
  else
    Modify(p, val, x << 1 | 1, ((L + R) >> 1) + 1, R);
  key[x] = min(key[x << 1], key[x << 1 | 1]);
}
inline void Add(int r, long long val, int x = 1, int L = 1, int R = n + 1) {
  if (R <= r) {
    key[x] += val;
    lazy[x] += val;
    return;
  }
  Down(x);
  Add(r, val, x << 1, L, ((L + R) >> 1));
  if (((L + R) >> 1) < r) Add(r, val, x << 1 | 1, ((L + R) >> 1) + 1, R);
  key[x] = min(key[x << 1], key[x << 1 | 1]);
}
int main() {
  int x, y, w;
  scanf("%d%d%d", &n, &m, &q);
  Modify(n + 1, INF);
  for (register int i = (2); i <= (n); i++) {
    scanf("%d%d", &A[i], &B[i]);
    Modify(i, B[i]);
  }
  for (register int i = (1); i <= (m); i++) {
    scanf("%d%d%d", &x, &y, &w);
    addedge(x, y, w);
  }
  for (register int i = (1); i <= (n); i++) {
    for (int j = fir[i]; j; j = e[j].nxt) Add(e[j].to, e[j].cap);
    tab[i + 1] = key[1];
  }
  memset(key, 0, sizeof key);
  memset(lazy, 0, sizeof lazy);
  Modify(1, INF);
  for (register int i = (2); i <= (n + 1); i++) Modify(i, tab[i] + A[i]);
  printf("%lld\n", key[1]);
  for (register int i = (1); i <= (q); i++) {
    scanf("%d%d", &x, &w);
    x++;
    A[x] = w;
    Modify(x, tab[x] + A[x]);
    printf("%lld\n", key[1]);
  }
  return 0;
}
