#include <bits/stdc++.h>
using namespace std;
constexpr int mod = 1e9 + 7;
constexpr int KINF = 0x3f3f3f3f;
constexpr double eps = 1e-7;
struct SegmentTree {
  int n;
  vector<long long> tag, mi;
  SegmentTree(int n) : n(n), tag(n << 2), mi(n << 2) {}
  SegmentTree(const vector<int>& a) {
    n = a.size() - 1;
    tag.resize(n << 2);
    mi.resize(n << 2);
    function<void(int, int, int)> build = [&](int id, int l, int r) {
      if (r == l) {
        mi[id] = a[l];
        return;
      }
      int mid = (l + r) >> 1;
      build((id << 1), l, mid);
      build((id << 1 | 1), mid + 1, r);
      pushup(id);
    };
    build(1, 0, n);
  }
  void pushup(int id) { mi[id] = min(mi[(id << 1)], mi[(id << 1 | 1)]); }
  void add(int id, int l, int r, long long v) {
    tag[id] += v;
    mi[id] += v;
  }
  void pushdown(int id, int l, int r) {
    if (!tag[id]) return;
    int mid = (l + r) >> 1;
    add((id << 1), l, mid, tag[id]);
    add((id << 1 | 1), mid + 1, r, tag[id]);
    tag[id] = 0;
  }
  void update(int id, int l, int r, int s, int e, long long v) {
    if (r < s || l > e) return;
    if (l >= s && r <= e) {
      add(id, l, r, v);
      return;
    }
    pushdown(id, l, r);
    int mid = (l + r) >> 1;
    update((id << 1), l, mid, s, e, v);
    update((id << 1 | 1), mid + 1, r, s, e, v);
    pushup(id);
  }
  void update(int l, int r, long long v) { update(1, 0, n, l, r, v); }
  long long query(int id, int l, int r, int pos) {
    if (r == l) return mi[id];
    pushdown(id, l, r);
    int mid = (l + r) >> 1;
    if (pos <= mid) return query((id << 1), l, mid, pos);
    return query((id << 1 | 1), mid + 1, r, pos);
  }
  long long query(int id, int l, int r, int s, int e) {
    if (r < s || l > e) return 0;
    if (l >= s && r <= e) return mi[id];
    int mid = (l + r) >> 1;
    pushdown(id, l, r);
    return min(query((id << 1), l, mid, s, e),
               query((id << 1 | 1), mid + 1, r, s, e));
  }
  long long query(int l, int r) { return query(1, 0, n, l, r); }
  long long query(int x) { return query(1, 0, n, x); }
};
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n, m, q;
  cin >> n >> m >> q;
  vector<int> a(n), b(n);
  for (int i = (int)0; i < (int)n - 1; ++i) cin >> a[i] >> b[i + 1];
  SegmentTree seg(b);
  vector<vector<pair<int, int>>> g(n);
  for (int i = (int)0; i < (int)m; ++i) {
    int x, y, z;
    cin >> x >> y >> z;
    --x, --y;
    g[x].emplace_back(y, z);
  }
  vector<long long> f(n);
  for (int u = (int)0; u < (int)n; ++u) {
    for (auto& [v, w] : g[u]) seg.update(0, v, w);
    f[u] = seg.mi[1];
  }
  multiset<long long> ms;
  for (int i = (int)0; i < (int)n; ++i) ms.insert(f[i] + a[i]);
  cout << *ms.begin() << endl;
  while (q--) {
    int v, w;
    cin >> v >> w;
    --v;
    ms.erase(ms.find(f[v] + a[v]));
    a[v] = w;
    ms.insert(f[v] + w);
    cout << *ms.begin() << endl;
  }
  return 0;
}
