#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
const long long int mod = 1e9 + 7;
const long long int mod1 = 998244353;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
long long int rand(long long int l, long long int r) {
  uniform_int_distribution<long long int> uid(l, r);
  return uid(rng);
}
const long long int N = 2e5 + 5;
long long int lazy[4 * N], tr[4 * N];
long long int a[N], b[N], c[N];
void build(long long int nd, long long int s, long long int e) {
  if (s == e) {
    tr[nd] = b[s];
    return;
  }
  long long int m = (s + e) >> 1;
  build(nd << 1, s, m);
  build(nd << 1 | 1, m + 1, e);
  tr[nd] = min(tr[nd << 1], tr[nd << 1 | 1]);
}
void push_down(long long int nd, long long int s, long long int e) {
  if (lazy[nd]) {
    tr[nd] += lazy[nd];
    if (s != e) {
      lazy[nd << 1] += lazy[nd];
      lazy[nd << 1 | 1] += lazy[nd];
    }
    lazy[nd] = 0;
  }
}
void update(long long int nd, long long int s, long long int e, long long int l,
            long long int r, long long int x) {
  push_down(nd, s, e);
  if (s > r || e < l) return;
  if (l <= s && e <= r) {
    lazy[nd] += x;
    push_down(nd, s, e);
    return;
  }
  long long int m = (s + e) >> 1;
  update(nd << 1, s, m, l, r, x);
  update(nd << 1 | 1, m + 1, e, l, r, x);
  tr[nd] = min(tr[nd << 1], tr[nd << 1 | 1]);
}
vector<pair<long long int, long long int> > g[N];
void build1(long long int nd, long long int s, long long int e) {
  if (s == e) {
    tr[nd] = a[s] + c[s];
    return;
  }
  long long int m = (s + e) >> 1;
  build1(nd << 1, s, m);
  build1(nd << 1 | 1, m + 1, e);
  tr[nd] = min(tr[nd << 1], tr[nd << 1 | 1]);
}
void update1(long long int nd, long long int s, long long int e,
             long long int idx, long long int x) {
  if (s == e) {
    a[s] = x;
    tr[nd] = x + c[s];
    return;
  }
  long long int m = (s + e) >> 1;
  if (idx <= m)
    update1(nd << 1, s, m, idx, x);
  else
    update1(nd << 1 | 1, m + 1, e, idx, x);
  tr[nd] = min(tr[nd << 1], tr[nd << 1 | 1]);
}
void solve() {
  long long int n, m, q;
  cin >> n >> m >> q;
  for (long long int i = 1; i <= n - 1; i++) {
    cin >> a[i] >> b[i];
  }
  build(1, 0, n - 1);
  for (long long int i = 1; i <= m; i++) {
    long long int x, y, z;
    cin >> x >> y >> z;
    g[x].push_back({y, z});
  }
  for (long long int i = 1; i <= n; i++) {
    for (pair<long long int, long long int> x : g[i]) {
      update(1, 0, n - 1, 0, x.first - 1, x.second);
    }
    c[i] = tr[1];
  }
  build1(1, 1, n);
  cout << tr[1] << '\n';
  for (long long int i = 1; i <= q; i++) {
    long long int v, x;
    cin >> v >> x;
    update1(1, 1, n, v, x);
    cout << tr[1] << '\n';
  }
}
signed main() {
  ios ::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  clock_t clk = clock();
  long long int t;
  t = 1;
  for (long long int i = 1; i <= t; i++) {
    solve();
  }
  cerr << '\n'
       << setprecision(10) << fixed << (double)(clock() - clk) / CLOCKS_PER_SEC;
  return 0;
}
