#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 5;
long long n, m, Q;
long long a[maxn], b[maxn], c[maxn], ans[maxn], d[2][maxn];
long long fa[maxn], fi[maxn], nex[maxn], id[maxn];
bool qe[maxn], flag[maxn];
struct edge {
  long long next, to;
  long long w;
} e[maxn * 3];
multiset<long long> se;
long long ednum = 1;
vector<long long> to_[maxn], ad[maxn], del[maxn];
priority_queue<pair<long long, long long>, vector<pair<long long, long long>>,
               greater<pair<long long, long long>>>
    pq;
void add(long long u, long long v, long long w) {
  ednum++;
  e[ednum].to = v;
  e[ednum].next = fi[u];
  e[ednum].w = w;
  fi[u] = ednum;
}
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 = fi[now.second]; p != -1; p = e[p].next) {
      long long t = now.first + e[p].w;
      if (t >= d[e[p].to]) continue;
      d[e[p].to] = t;
      fa[e[p].to] = now.second;
      pq.push(make_pair(t, e[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(fi, -1, sizeof(fi));
  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 = fi[fa[i]]; e[p].to != i || e[p].w + d[0][fa[i]] != d[0][i];
         p = e[p].next)
      ;
    flag[p >> 1] = 1;
  }
  for (i = n; i != 1; i = fa[i]) {
    nex[fa[i]] = i;
    for (p = fi[i]; e[p].to != fa[i] || e[p].w + d[1][i] != d[1][fa[i]];
         p = e[p].next)
      ;
    qe[p >> 1] = 1;
  }
  for (i = j = 1; i; i = nex[i], j++) id[i] = j;
  dfs(1);
  for (i = 1; i <= m; i++) {
    p = a[i], q = b[i];
    if (flag[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]);
  }
  se.insert(0x3f3f3f3f3f3f3f3f);
  for (i = 1; i < id[n]; i++) {
    for (j = 0; j < ad[i].size(); j++) se.insert(ad[i][j]);
    for (j = 0; j < del[i].size(); j++) se.erase(se.find(del[i][j]));
    ans[i] = *se.begin();
  }
  while (Q--) {
    scanf("%lld%lld", &t, &o);
    p = a[t], q = b[t];
    if (qe[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));
  }
}
