#include <bits/stdc++.h>
using namespace std;
int n, m, q;
struct ee {
  int first, second, id;
  ee(int x, int y, int z) : first(x), second(y), id(z) {}
};
vector<ee> G[200036];
priority_queue<pair<long long, int> > Q;
long long dis[200036];
int vis[200036], pre[200036], pr[200036];
int in[200036], ine[200036];
void dijk(int s) {
  memset(dis, 0x3f, sizeof dis);
  dis[s] = 0, Q.push(make_pair(0, s));
  while (!Q.empty()) {
    int u = Q.top().second;
    Q.pop();
    if (vis[u]) continue;
    vis[u] = 1;
    for (auto t : G[u]) {
      int v = t.first;
      if (dis[v] > dis[u] + t.second)
        dis[v] = dis[u] + t.second, Q.push(make_pair(-dis[v], v)), pre[v] = u,
        pr[v] = t.id;
    }
  }
}
int L[200036], R[200036];
long long disS[200036], disT[200036];
void dijk1(int s, long long* dis) {
  memset(dis, 0x3f, sizeof ::dis);
  memset(vis, 0, sizeof vis);
  dis[s] = 0, Q.push(make_pair(0, s));
  while (!Q.empty()) {
    int u = Q.top().second;
    Q.pop();
    if (in[u]) L[u] = in[u];
    if (vis[u]) continue;
    vis[u] = 1;
    for (auto t : G[u]) {
      int v = t.first;
      if (dis[v] > dis[u] + t.second) {
        dis[v] = dis[u] + t.second, Q.push(make_pair(-dis[v], v));
        L[v] = L[u];
      }
    }
  }
}
void dijk2(int s, long long* dis) {
  memset(dis, 0x3f, sizeof ::dis);
  memset(vis, 0, sizeof vis);
  dis[s] = 0, Q.push(make_pair(0, s));
  while (!Q.empty()) {
    int u = Q.top().second;
    Q.pop();
    if (in[u]) R[u] = in[u];
    if (vis[u]) continue;
    vis[u] = 1;
    for (auto t : G[u]) {
      int v = t.first;
      if (dis[v] > dis[u] + t.second) {
        dis[v] = dis[u] + t.second, Q.push(make_pair(-dis[v], v));
        R[v] = R[u];
      }
    }
  }
}
vector<int> ro;
int S;
long long T[200036 << 2], lz[200036 << 2];
const long long inf = 0x3f3f3f3f3f3f3f3f;
void doit(int u, long long x) { T[u] = min(T[u], x), lz[u] = min(lz[u], x); }
void pd(int rt) {
  if (lz[rt] != inf) {
    doit(rt << 1, lz[rt]), doit(rt << 1 | 1, lz[rt]);
    lz[rt] = inf;
  }
}
void chkmn(int rt, int l, int r, int L, int R, long long x) {
  if (L > R) return;
  if (L <= l && R >= r) {
    doit(rt, x);
    return;
  }
  pd(rt);
  int m = l + r >> 1;
  if (L <= m) chkmn(rt << 1, l, m, L, R, x);
  if (R > m) chkmn(rt << 1 | 1, m + 1, r, L, R, x);
}
long long getit(int rt, int l, int r, int p) {
  if (l == r) {
    return T[rt];
  }
  pd(rt);
  int m = l + r >> 1;
  if (p <= m)
    return getit(rt << 1, l, m, p);
  else
    return getit(rt << 1 | 1, m + 1, r, p);
}
struct ed {
  int u, v, w;
} E[200036];
void solve() {
  cin >> n >> m >> q;
  for (int i = (1), iend = (m); i <= iend; ++i) {
    static int u, v, w;
    scanf("%d%d%d", &u, &v, &w);
    G[u].emplace_back(ee(v, w, i)), G[v].emplace_back(ee(u, w, i));
    E[i].u = u, E[i].v = v, E[i].w = w;
  }
  dijk(n);
  int cur = 1;
  while (cur != n)
    ro.push_back(cur), in[cur] = ro.size(), ine[pr[cur]] = 1, cur = pre[cur];
  ro.push_back(n), in[n] = ro.size();
  S = ro.size();
  reverse((ro).begin(), (ro).end());
  dijk1(1, disS), dijk2(n, disT);
  memset(T, 0x3f, sizeof T), memset(lz, 0x3f, sizeof lz);
  for (int i = (1), iend = (m); i <= iend; ++i) {
    int u = E[i].u, v = E[i].v;
    if (ine[i]) continue;
    chkmn(1, 1, S, L[u] + 1, R[v], disS[u] + E[i].w + disT[v]);
    chkmn(1, 1, S, L[v] + 1, R[u], disS[v] + E[i].w + disT[u]);
  }
  long long res = inf;
  while (q--) {
    static int t, x, u, v;
    scanf("%d%d", &t, &x);
    u = E[t].u, v = E[t].v;
    if (ine[t]) {
      res = min(disS[n] - E[t].w + x, getit(1, 1, S, max(in[u], in[v])));
    } else {
      res = min(disS[u] + x + disT[v], disS[v] + x + disT[u]);
      res = min(res, dis[1]);
    }
    printf("%lld\n", res);
  }
}
signed main() { solve(); }
