#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  long long x = 0, f = 1;
  char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    x = (x << 1) + (x << 3) + ch - '0';
    ch = getchar();
  }
  return x * f;
}
const long long maxn = 2e5 + 1e2;
struct Node {
  long long a, b, w;
};
struct stt {
  long long f[4 * maxn];
  long long add[4 * maxn];
  long long val[4 * maxn];
  void up(long long root) { f[root] = min(f[root << 1], f[root << 1 | 1]); }
  void pushdown(long long root, long long l, long long r) {
    if (add[root]) {
      add[root << 1] += add[root];
      add[root << 1 | 1] += add[root];
      f[root << 1] += add[root];
      f[root << 1 | 1] += add[root];
      add[root] = 0;
    }
  }
  void build(long long root, long long l, long long r) {
    if (l == r) {
      f[root] = val[l];
      return;
    }
    long long mid = l + r >> 1;
    build(root << 1, l, mid);
    build(root << 1 | 1, mid + 1, r);
    up(root);
  }
  void update(long long root, long long l, long long r, long long x,
              long long y, long long p) {
    if (x <= l && r <= y) {
      f[root] += p;
      add[root] += p;
      return;
    }
    pushdown(root, l, r);
    long long mid = l + r >> 1;
    if (x <= mid) update(root << 1, l, mid, x, y, p);
    if (y > mid) update(root << 1 | 1, mid + 1, r, x, y, p);
    up(root);
  }
};
stt a, b;
Node ymh[maxn];
long long n, m, cnt;
long long pp[maxn];
long long q;
vector<pair<long long, long long> > v[maxn];
void print(long long x) {
  if (x >= 10) print(x / 10);
  putchar(x % 10 + '0');
}
signed main() {
  n = read(), m = read();
  q = read();
  for (register long long i = 1; i < n; ++i)
    a.val[i] = read(), pp[i] = a.val[i], b.val[i + 1] = read();
  for (register long long i = 1; i <= m; ++i) {
    ymh[i].a = read(), ymh[i].b = read(), ymh[i].w = read();
    v[ymh[i].a].push_back(make_pair(ymh[i].b, ymh[i].w));
  }
  b.build(1, 1, n);
  for (register long long i = 1; i <= n; ++i) {
    for (register long long j = 0; j < v[i].size(); ++j) {
      b.update(1, 1, n, 1, v[i][j].first, v[i][j].second);
    }
    a.val[i] += b.f[1];
  }
  a.build(1, 1, n);
  cout << a.f[1] << endl;
  for (long long i = 1; i <= q; i++) {
    long long x = read(), y = read();
    a.update(1, 1, n, x, x, y - pp[x]);
    pp[x] = y;
    print(a.f[1]);
    puts("");
  }
  return 0;
}
