#include <bits/stdc++.h>
using namespace std;
namespace fastIO {
bool error;
inline char gc() {
  static char buf[1000000 + 1], *l = buf, *r = buf;
  if (l == r) {
    l = buf;
    r = buf + fread(buf, 1, 1000000, stdin);
    if (l == r) {
      error = 1;
      return -1;
    }
  }
  return *l++;
}
inline bool isnum(char ch) { return ('0' <= ch && ch <= '9') || ch == '-'; }
inline void read(int &x) {
  char ch;
  x = 0;
  int f = 1;
  while (!isnum(ch = gc()) && !error)
    ;
  if (error) return;
  if (ch == '-') f = -1, ch = gc();
  do {
    x = (x << 1) + (x << 3) + ch - '0';
  } while (isdigit(ch = gc()) && !error);
  x *= f;
}
inline void write(long long x) {
  if (!x) {
    putchar('0');
    return;
  }
  if (x < 0) {
    x = -x;
    putchar('-');
  }
  static int buf[23];
  register short len = 0;
  for (; x; x /= 10) buf[++len] = x % 10;
  for (; len; len--) putchar(buf[len] + '0');
}
}  // namespace fastIO
using namespace fastIO;
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;
  read(n);
  read(m);
  read(q);
  Modify(n + 1, INF);
  for (register int i = (2); i <= (n); i++) {
    read(A[i]);
    read(B[i]);
    Modify(i, B[i]);
  }
  for (register int i = (1); i <= (m); i++) {
    read(x);
    read(y);
    read(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]);
  write(key[1]);
  putchar('\n');
  for (register int i = (1); i <= (q); i++) {
    read(x);
    read(w);
    x++;
    A[x] = w;
    Modify(x, tab[x] + A[x]);
    write(key[1]);
    putchar('\n');
  }
  return 0;
}
