#include <bits/stdc++.h>
using namespace std;
const int maxn = 200005;
inline int gi() {
  char c = getchar();
  while (c < '0' || c > '9') c = getchar();
  int sum = 0;
  while ('0' <= c && c <= '9') sum = sum * 10 + c - 48, c = getchar();
  return sum;
}
int n, m, q, A[maxn], B[maxn];
vector<pair<int, int>> vec[maxn];
long long sum[maxn], Min[maxn << 2], tag[maxn << 2];
priority_queue<long long, vector<long long>, greater<long long>> q1, q2;
void build(int s, int l, int r) {
  if (l == r) return Min[s] = B[l - 1], void();
  build((s << 1), l, ((l + r) >> 1));
  build((s << 1 | 1), ((l + r) >> 1) + 1, r);
  Min[s] = min(Min[(s << 1)], Min[(s << 1 | 1)]);
}
void modify(int s, int l, int r, int ql, int qr, int v) {
  if (ql <= l && r <= qr) return tag[s] += v, Min[s] += v, void();
  if (ql <= ((l + r) >> 1)) modify((s << 1), l, ((l + r) >> 1), ql, qr, v);
  if (qr >= ((l + r) >> 1) + 1)
    modify((s << 1 | 1), ((l + r) >> 1) + 1, r, ql, qr, v);
  Min[s] = min(Min[(s << 1)], Min[(s << 1 | 1)]) + tag[s];
}
int main() {
  n = gi();
  m = gi();
  q = gi();
  for (int i = 1; i < n; ++i) A[i] = gi(), B[i] = gi();
  for (int u, v, w, i = 1; i <= m; ++i) {
    u = gi();
    v = gi();
    w = gi();
    vec[u].push_back(make_pair(v, w));
  }
  build(1, 1, n);
  for (int i = 1; i <= n; ++i) {
    for (auto j : vec[i]) modify(1, 1, n, 1, j.first, j.second);
    sum[i] = Min[1];
    q1.push(sum[i] + A[i]);
  }
  printf("%lld\n", q1.top());
  for (int i = 1, x, v; i <= q; ++i) {
    x = gi();
    v = gi();
    q2.push(A[x] + sum[x]);
    q1.push((A[x] = v) + sum[x]);
    while (!q1.empty() && !q2.empty() && q1.top() == q2.top())
      q1.pop(), q2.pop();
    printf("%lld\n", q1.top());
  }
  return 0;
}
