#include <bits/stdc++.h>
template <typename Tp>
void in(Tp &x) {
  char ch = getchar(), f = 1;
  x = 0;
  while (ch != '-' && (ch < '0' || ch > '9')) ch = getchar();
  if (ch == '-') ch = getchar(), f = -1;
  while (ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar();
  x *= f;
}
template <typename Tp>
void out(Tp x) {
  if (x > 9) out(x / 10);
  putchar(x % 10 + '0');
  return;
}
template <typename Tp>
Tp Max(const Tp &x, const Tp &y) {
  return x > y ? x : y;
}
template <typename Tp>
Tp Min(const Tp &x, const Tp &y) {
  return x < y ? x : y;
}
template <typename Tp>
bool chkmax(Tp &x, Tp y) {
  return x >= y ? 0 : (x = y, 1);
}
template <typename Tp>
bool chkmin(Tp &x, Tp y) {
  return x <= y ? 0 : (x = y, 1);
}
const long long MAXN = 200010;
long long n, m, q;
long long A[MAXN], B[MAXN];
long long f[MAXN];
long long cnt, head[MAXN], data[MAXN], nxt[MAXN], flow[MAXN];
long long minx[MAXN << 2], tag[MAXN << 2];
void add(long long x, long long y, long long z) {
  nxt[cnt] = head[x];
  data[cnt] = y;
  flow[cnt] = z;
  head[x] = cnt++;
}
void pushdown(long long now) {
  if (tag[now]) {
    tag[now << 1] += tag[now];
    minx[now << 1] += tag[now];
    tag[now << 1 | 1] += tag[now];
    minx[now << 1 | 1] += tag[now];
    tag[now] = 0;
  }
}
void update(long long now) {
  minx[now] = Min(minx[now << 1], minx[now << 1 | 1]);
}
void build(long long now, long long l, long long r) {
  if (l == r)
    minx[now] = B[l];
  else {
    long long mid = (l + r) >> 1;
    build(now << 1, l, mid);
    build(now << 1 | 1, mid + 1, r);
    update(now);
  }
}
void modify(long long now, long long l, long long r, long long x, long long y,
            long long z) {
  if (x <= l && r <= y) {
    minx[now] += z;
    tag[now] += z;
    return;
  }
  pushdown(now);
  long long mid = (l + r) >> 1;
  if (x <= mid) modify(now << 1, l, mid, x, y, z);
  if (mid < y) modify(now << 1 | 1, mid + 1, r, x, y, z);
  update(now);
}
long long check(long long x) {
  for (long long i = head[x]; i != -1; i = nxt[i]) {
    if (!data[i]) continue;
    modify(1, 1, n, 1, data[i], flow[i]);
  }
  return minx[1];
}
std::multiset<long long> Q;
int main() {
  in(n);
  in(m);
  in(q);
  memset(head, -1, sizeof head);
  for (long long i = (1), i_END_ = (n - 1); i <= i_END_; i++)
    in(A[i]), in(B[i + 1]);
  for (long long i = (1), i_END_ = (m); i <= i_END_; i++) {
    long long x, y, z;
    in(x);
    in(y);
    in(z);
    add(x, y, z);
  }
  build(1, 1, n);
  for (long long i = (1), i_END_ = (n); i <= i_END_; i++) {
    f[i] = check(i);
    Q.insert(A[i] + f[i]);
  }
  printf("%lld\n", *Q.begin());
  while (q--) {
    long long x, y;
    in(x);
    in(y);
    Q.erase(Q.find(A[x] + f[x]));
    A[x] = y;
    Q.insert(A[x] + f[x]);
    out(*Q.begin());
    putchar(10);
  }
  return 0;
}
