#include <bits/stdc++.h>
using namespace std;
const int SZ = 1 << 18;
vector<tuple<int, int, int>> adj[200000];
int N, M, Q, L[200000], R[200000], chk[200000];
bool path[200000];
pair<int, int> P[200000];
long long D[2][200000], tree[2 * SZ];
tuple<int, int, int> E[200000];
void set_tree(int s, int e, long long v) {
  for (s += SZ, e += SZ; s <= e; s >>= 1, e >>= 1) {
    if (s & 1) tree[s] = min(tree[s], v), s++;
    if (~e & 1) tree[e] = min(tree[e], v), e--;
  }
}
long long get_min(int n) {
  long long ret = 0x7fffffffffffffffLL;
  for (ret = min(ret, tree[n += SZ]); n >>= 1;) ret = min(ret, tree[n]);
  return ret;
}
void dijk(int c, int p, int b) {
  priority_queue<pair<long long, int>> Q;
  for (int i = 0; i < N; i++) D[p][i] = 0x2fffffffffffffffLL;
  D[p][c] = 0;
  P[c] = {-1, -1};
  Q.push({0, c});
  while (!Q.empty()) {
    auto [t, c] = Q.top();
    Q.pop();
    if (-t != D[p][c]) continue;
    for (auto [n, w, idx] : adj[c]) {
      if (D[p][n] > D[p][c] + w) {
        D[p][n] = D[p][c] + w;
        P[n] = {c, idx};
        if (b == 1 && !path[n])
          L[n] = L[c];
        else if (b == 2 && !path[n])
          R[n] = R[c];
        Q.push({-D[p][n], n});
      }
    }
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  ((void)0);
  ((void)0);
  ((void)0);
  long long ans;
  cin >> N >> M >> Q;
  memset(tree, 0x7f, sizeof(tree));
  for (int i = 0; i < M; i++) {
    auto &[u, v, w] = E[i];
    cin >> u >> v >> w;
    adj[--u].emplace_back(--v, w, i);
    adj[v].emplace_back(u, w, i);
  }
  dijk(N - 1, 1, 0);
  L[0] = R[0] = path[0] = 1;
  for (int now = 0; P[now].first != -1; now = P[now].first)
    chk[P[now].second] = L[P[now].first] = R[P[now].first] =
        L[now] + (path[P[now].first] = 1);
  dijk(0, 0, 1);
  dijk(N - 1, 1, 2);
  for (int i = 0; i < M; i++) {
    if (chk[i] == 0) {
      auto &[u, v, w] = E[i];
      set_tree(L[u] + 1, R[v], D[0][u] + w + D[1][v]);
      set_tree(L[v] + 1, R[u], D[0][v] + w + D[1][u]);
    }
  }
  while (Q--) {
    int t, nw;
    cin >> t >> nw;
    auto &[u, v, w] = E[--t];
    if (chk[t]) {
      ans = D[0][N - 1] - w + nw;
      if (w < nw) ans = min(ans, get_min(chk[t]));
    } else {
      ans = D[0][N - 1];
      if (nw < w)
        ans = min({ans, D[0][u] + nw + D[1][v], D[0][v] + nw + D[1][u]});
    }
    cout << ans << '\n';
  }
  return 0;
}
