#include <bits/stdc++.h>
using namespace std;
struct adj_list {
  long long v, w, i;
};
struct priority_list {
  long long v, w;
  bool operator<(const priority_list &o) const { return w > o.w; }
};
long long n, m, q, mx = 0;
long long skip[200002], u[200002], v[200002], w[200002], index_skip[200002];
long long dist[3][200002], child[200002], l[200002], r[200002];
bool visited[200002], main_path[200002], main_edge[200002];
vector<long long> diff[200002];
vector<adj_list> adj[200002];
priority_queue<priority_list> pq;
multiset<long long> s;
void dijkstra(long long st, long long type) {
  memset(visited, 0, sizeof visited);
  fill(dist[type] + 1, dist[type] + n + 1, 1e18 + 8);
  pq.push({st, dist[type][st] = 0});
  while (!pq.empty()) {
    priority_list v = pq.top();
    pq.pop();
    if (visited[v.v]) continue;
    visited[v.v] = 1;
    for (auto u : adj[v.v]) {
      if (dist[type][u.v] > v.w + u.w) {
        child[u.v] = u.i;
        if (!main_path[u.v] && type <= 1) {
          if (!type) {
            l[u.v] = l[v.v];
          } else {
            r[u.v] = r[v.v];
          }
        }
        pq.push({u.v, dist[type][u.v] = v.w + u.w});
      }
    }
  }
}
signed main() {
  scanf("%lld %lld %lld", &n, &m, &q);
  for (long long i = 1; i <= m; i++) {
    scanf("%lld %lld %lld", &u[i], &v[i], &w[i]);
    adj[u[i]].push_back({v[i], w[i], i});
    adj[v[i]].push_back({u[i], w[i], i});
  }
  dijkstra(n, 2);
  main_path[1] = main_edge[child[1]] = 1;
  for (long long i = 1, cur = 1; cur != n; i++) {
    index_skip[child[cur]] = i;
    cur ^= u[child[cur]] ^ v[child[cur]];
    main_path[cur] = main_edge[child[cur]] = 1;
    l[cur] = r[cur] = mx = i;
  }
  dijkstra(1, 0);
  dijkstra(n, 1);
  for (long long i = 1; i <= m; i++) {
    if (!main_edge[i]) {
      if (l[u[i]] + 1 <= r[v[i]]) {
        diff[l[u[i]] + 1].push_back(dist[0][u[i]] + w[i] + dist[1][v[i]]);
        diff[r[v[i]] + 1].push_back(-(dist[0][u[i]] + w[i] + dist[1][v[i]]));
      }
      if (l[v[i]] + 1 <= r[u[i]]) {
        diff[l[v[i]] + 1].push_back(dist[0][v[i]] + w[i] + dist[1][u[i]]);
        diff[r[u[i]] + 1].push_back(-(dist[0][v[i]] + w[i] + dist[1][u[i]]));
      }
    }
  }
  fill(skip + 1, skip + mx + 1, 1e18 + 8);
  for (long long i = 1; i <= mx; i++) {
    for (auto uwu : diff[i]) {
      if (uwu > 0)
        s.insert(uwu);
      else if (uwu < 0)
        s.erase(s.find(-uwu));
    }
    if (!s.empty()) skip[i] = *s.begin();
  }
  for (long long i = 1, t, x, ans; i <= q; i++) {
    cin >> t >> x;
    if (index_skip[t]) {
      ans = min({skip[index_skip[t]], dist[0][n] - w[t] + x});
    } else {
      ans = min({dist[0][n], dist[0][u[t]] + x + dist[1][v[t]],
                 dist[0][v[t]] + x + dist[1][u[t]]});
    }
    printf("%lld\n", ans);
  }
}
