#include <bits/stdc++.h>
using namespace std;
int n, m, q;
int A[200005], B[200005];
long long P[200005];
vector<pair<int, int> > G[200005];
long long mn[200005 << 2], ad[200005 << 2];
void dtp(int u, long long v) { mn[u] += v, ad[u] += v; }
void dt(int u) {
  if (ad[u]) dtp(u << 1, ad[u]), dtp(u << 1 | 1, ad[u]), ad[u] = 0;
}
void add(int u, int l, int r, int ql, int qr, long long v) {
  if (l > qr || ql > r || ql > qr) return;
  if (ql <= l && r <= qr) return (void)(dtp(u, v));
  int m = l + r >> 1;
  dt(u);
  add(u << 1, l, m, ql, qr, v), add(u << 1 | 1, m + 1, r, ql, qr, v);
  mn[u] = min(mn[u << 1], mn[u << 1 | 1]);
}
int main() {
  scanf("%d%d%d", &n, &m, &q);
  for (int i = (1), LIM = (n - 1); i <= LIM; i++)
    scanf("%d%d", &A[i], &B[i + 1]), add(1, 1, n, i + 1, i + 1, B[i + 1]);
  for (int i = (1), LIM = (m); i <= LIM; i++) {
    int x, y, z;
    scanf("%d%d%d", &x, &y, &z);
    G[x].push_back(make_pair(y, z));
  }
  for (int i = (1), LIM = (n); i <= LIM; i++) {
    for (auto v : G[i]) add(1, 1, n, 1, v.first, v.second);
    P[i] = mn[1];
  }
  memset(mn, 0, sizeof mn), memset(ad, 0, sizeof ad);
  for (int i = (1), LIM = (n); i <= LIM; i++) add(1, 1, n, i, i, A[i] + P[i]);
  printf("%lld\n", mn[1]);
  for (int x, y; q--;) {
    scanf("%d%d", &x, &y);
    add(1, 1, n, x, x, y - A[x]);
    A[x] = y;
    printf("%lld\n", mn[1]);
  }
}
