#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast,no-stack-protector")
using namespace std;
function<void(void)> ____ = []() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
};
template <typename T>
vector<T> &operator<<(vector<T> &__container, T x) {
  __container.push_back(x);
  return __container;
}
template <typename T>
ostream &operator<<(ostream &out, vector<T> &__container) {
  for (T _ : __container) out << _ << ' ';
  return out;
}
const int MAXN = 2e5 + 7;
vector<int> ca, cb;
vector<pair<int, int> > G[MAXN];
struct SegmentTree {
  long long int minn[MAXN << 2], lazy[MAXN << 2];
  int l[MAXN << 2], r[MAXN << 2];
  void pushdown(int rt) {
    if (!lazy[rt]) return;
    lazy[rt << 1] += lazy[rt];
    lazy[rt << 1 | 1] += lazy[rt];
    minn[rt << 1] += lazy[rt];
    minn[rt << 1 | 1] += lazy[rt];
    lazy[rt] = 0;
  }
  void build(int L, int R, int rt = 1) {
    l[rt] = L;
    r[rt] = R;
    if (L + 1 == R) return;
    int mid = (L + R) >> 1;
    build(L, mid, rt << 1);
    build(mid, R, rt << 1 | 1);
  }
  void modify(int L, int R, long long int x, int rt = 1) {
    if (L >= r[rt] or l[rt] >= R) return;
    if (L <= l[rt] and r[rt] <= R) {
      lazy[rt] += x;
      minn[rt] += x;
      return;
    }
    pushdown(rt);
    modify(L, R, x, rt << 1);
    modify(L, R, x, rt << 1 | 1);
    minn[rt] = min(minn[rt << 1], minn[rt << 1 | 1]);
  }
  long long int qmin(int L, int R, int rt = 1) {
    if (L >= r[rt] or l[rt] >= R) return 0x3f3f3f3f;
    if (L <= l[rt] and r[rt] <= R) return minn[rt];
    pushdown(rt);
    return min(qmin(L, R, rt << 1), qmin(L, R, rt << 1 | 1));
  }
} STa, STb;
void solve() {
  int n, m, q;
  scanf("%d", &n);
  scanf("%d", &m);
  scanf("%d", &q);
  ca.resize(n + 1);
  cb.resize(n + 1);
  for (int i = 1; i < n; i++) scanf("%d", &ca[i]), scanf("%d", &cb[i]);
  STa.build(1, n + 1);
  STb.build(1, n + 1);
  for (int i = 1; i <= n; i++) STa.modify(i, i + 1, cb[i - 1]);
  for (int i = 1; i <= m; i++) {
    int u, v, w;
    scanf("%d", &u);
    scanf("%d", &v);
    scanf("%d", &w);
    G[u] << make_pair(v, w);
  }
  for (int i = 1; i <= n; i++) {
    for (auto p : G[i]) STa.modify(1, p.first + 1, p.second);
    STb.modify(i, i + 1, STa.qmin(1, n + 1) + ca[i]);
  }
  cout << STb.qmin(1, n + 1) << "\n";
  while (q--) {
    int x, w;
    scanf("%d", &x);
    scanf("%d", &w);
    STb.modify(x, x + 1, w - ca[x]);
    ca[x] = w;
    cout << STb.qmin(1, n + 1) << "\n";
  }
}
int main() {
  solve();
  return 0;
}
