#include <bits/stdc++.h>
using namespace std;
const int N = 200010;
const int LOGN = 20;
const long long oo = 1e18;
int n, m, q, a[N], b[N];
vector<pair<int, int> > g[N];
long long seg[4 * N], lazy[4 * N], best[N];
void push(int n, int s, int e) {
  if (lazy[n]) {
    seg[n] += lazy[n];
    if (s != e) lazy[2 * n] += lazy[n], lazy[2 * n + 1] += lazy[n];
    lazy[n] = 0;
  }
}
long long get(int n, int s, int e, int l, int r) {
  push(n, s, e);
  if (s > r || e < l) return oo;
  if (s >= l && e <= r) return seg[n];
  return min(get(2 * n, s, (s + e) / 2, l, r),
             get(2 * n + 1, (s + e) / 2 + 1, e, l, r));
}
void update(int n, int s, int e, int l, int r, int val) {
  push(n, s, e);
  if (s > r || e < l) return;
  if (s >= l && e <= r) {
    lazy[n] += val;
    push(n, s, e);
    return;
  }
  update(2 * n, s, (s + e) / 2, l, r, val);
  update(2 * n + 1, (s + e) / 2 + 1, e, l, r, val);
  seg[n] = min(seg[2 * n], seg[2 * n + 1]);
}
int main() {
  cin >> n >> m >> q;
  for (int i = 2; i <= n; ++i) scanf("%d%d", &a[i - 1], &b[i]);
  for (int a, b, c, i = 0; i < m; ++i) {
    scanf("%d%d%d", &a, &b, &c);
    g[a].push_back(make_pair(b, c));
  }
  multiset<long long> ls;
  for (int i = 1; i <= n; ++i) update(1, 1, n, i, i, b[i]);
  long long cr = 0;
  for (int i = 1; i <= n; ++i) {
    for (auto v : g[i]) {
      update(1, 1, n, 1, v.first, v.second), cr += v.second;
    }
    long long fx = min(get(1, 1, n, 1, n), cr);
    best[i] = fx + a[i];
    ls.insert(best[i]);
  }
  long long g = get(1, 1, n, 1, n);
  ls.insert(g);
  printf("%lld\n", *ls.begin());
  for (int x, y, i = 0; i < q; ++i) {
    scanf("%d%d", &x, &y);
    ls.erase(ls.find(best[x]));
    best[x] -= a[x];
    a[x] = y;
    best[x] += a[x];
    ls.insert(best[x]);
    printf("%lld\n", *ls.begin());
  }
  return 0;
}
