#include <bits/stdc++.h>
using namespace std;
long long n, m, Q, bb = 1, A[200100], B[200100], C[200100], fa[200100],
                   first[200100], nxt[200100], id[200100], ans[200100],
                   d[2][200100];
bool in[200100], sb[200100];
struct Bn {
  long long to, next, quan;
} bn[200100 << 1];
multiset<long long> second;
vector<long long> to[200100], ad[200100], del[200100];
priority_queue<pair<long long, long long>, vector<pair<long long, long long> >,
               greater<pair<long long, long long> > >
    pq;
inline void add(long long u, long long v, long long w) {
  bb++;
  bn[bb].to = v;
  bn[bb].next = first[u];
  bn[bb].quan = w;
  first[u] = bb;
}
inline void Dij(long long s, long long *d) {
  long long i, t, p, q;
  d[s] = 0;
  pq.push(make_pair(0, s));
  for (; !pq.empty();) {
    pair<long long, long long> now = pq.top();
    pq.pop();
    if (now.first > d[now.second]) continue;
    for (p = first[now.second]; p != -1; p = bn[p].next) {
      long long t = now.first + bn[p].quan;
      if (t >= d[bn[p].to]) continue;
      d[bn[p].to] = t;
      fa[bn[p].to] = now.second;
      pq.push(make_pair(t, bn[p].to));
    }
  }
}
void dfs(long long now) {
  long long i, t;
  for (i = 0; i < to[now].size(); i++) {
    t = to[now][i];
    if (!id[t]) id[t] = id[now];
    dfs(t);
  }
}
int main() {
  memset(first, -1, sizeof(first));
  memset(d, 0x3f, sizeof(d));
  long long i, j, t, p, q, o;
  cin >> n >> m >> Q;
  for (i = 1; i <= m; i++) {
    scanf("%lld%lld%lld", &p, &q, &o);
    add(p, q, o), add(q, p, o);
    A[i] = p, B[i] = q, C[i] = o;
  }
  Dij(n, d[1]), Dij(1, d[0]);
  fa[1] = 0;
  for (i = 2; i <= n; i++) {
    if (d[0][i] == 0x3f3f3f3f3f3f3f3f) continue;
    to[fa[i]].push_back(i);
    for (p = first[fa[i]]; bn[p].to != i || bn[p].quan + d[0][fa[i]] != d[0][i];
         p = bn[p].next)
      ;
    sb[p >> 1] = 1;
  }
  for (i = n; i != 1; i = fa[i]) {
    nxt[fa[i]] = i;
    for (p = first[i]; bn[p].to != fa[i] || bn[p].quan + d[1][i] != d[1][fa[i]];
         p = bn[p].next)
      ;
    in[p >> 1] = 1;
  }
  for (i = j = 1; i; i = nxt[i], j++) id[i] = j;
  dfs(1);
  for (i = 1; i <= m; i++) {
    p = A[i], q = B[i];
    if (sb[i]) continue;
    if (id[p] > id[q]) swap(p, q);
    ad[id[p]].push_back(d[0][p] + d[1][q] + C[i]);
    del[id[q]].push_back(d[0][p] + d[1][q] + C[i]);
  }
  second.insert(0x3f3f3f3f3f3f3f3f);
  for (i = 1; i < id[n]; i++) {
    for (j = 0; j < ad[i].size(); j++) second.insert(ad[i][j]);
    for (j = 0; j < del[i].size(); j++) second.erase(second.find(del[i][j]));
    ans[i] = *second.begin();
  }
  while (Q--) {
    scanf("%lld%lld", &t, &o);
    p = A[t], q = B[t];
    if (in[t])
      printf("%lld\n", min(ans[min(id[p], id[q])], d[0][n] - C[t] + o));
    else
      printf("%lld\n",
             min(d[0][n], min(d[0][p] + d[1][q], d[0][q] + d[1][p]) + o));
  }
}
