#include <bits/stdc++.h>
using namespace std;
const int MX = 200005;
int n, m, q, u[MX], v[MX], w[MX], f[MX], ini[MX], fin[MX], o[MX], ex[MX];
long long ds[MX], dt[MX], dst;
vector<pair<long long, long long>> adj[MX], as[MX], at[MX];
void dij(int s, long long dis[], vector<pair<long long, long long>> a[]) {
  for (int i = 0; i < (MX); i++) dis[i] = 1e18;
  dis[s] = 0;
  priority_queue<pair<long long, long long>, vector<pair<long long, long long>>,
                 greater<pair<long long, long long>>>
      pq;
  pq.emplace(0, s);
  while (pq.size()) {
    int u = pq.top().second;
    long long d = pq.top().first;
    pq.pop();
    if (dis[u] < d) continue;
    for (pair<long long, long long> &v : adj[u]) {
      long long p = d + w[v.second];
      if (dis[v.first] > p) {
        dis[v.first] = p;
        pq.emplace(p, v.first);
      }
    }
  }
  for (int u = 1; u <= n; u++)
    for (pair<long long, long long> &v : adj[u])
      if (dis[u] + w[v.second] == dis[v.first]) a[u].push_back(v);
}
void go(long long dis[], vector<pair<long long, long long>> adj[], int ini[],
        int sgn) {
  iota(o, o + n, 1);
  sort(o, o + n, [&](int i, int j) { return dis[i] < dis[j]; });
  for (int i = 0; i < (MX); i++)
    if (f[i] == -1) ini[i] = sgn * 1e9;
  for (int _ = 0; _ < (n); _++) {
    int u = o[_];
    for (pair<long long, long long> &v : adj[u])
      if (f[v.first] == -1)
        ini[v.first] = sgn * min(sgn * ini[v.first], sgn * ini[u]);
  }
}
long long mn[MX];
vector<long long> st[MX], en[MX];
multiset<long long> mst;
void insert(int a, int b, long long w) {
  if (a >= b) return;
  st[a].push_back(w);
  en[b].push_back(w);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m >> q;
  for (int i = 1; i <= m; i++) {
    cin >> u[i] >> v[i] >> w[i];
    adj[u[i]].emplace_back(v[i], i);
    adj[v[i]].emplace_back(u[i], i);
  }
  dij(1, ds, as);
  dij(n, dt, at);
  dst = ds[n];
  memset(f, -1, sizeof(f));
  memset(ex, -1, sizeof(ex));
  for (int u = 1, i = 0;; i++) {
    f[u] = ini[u] = fin[u] = i;
    if (u == n) break;
    for (pair<long long, long long> &v : adj[u])
      if (ds[u] + w[v.second] + dt[v.first] == dst) {
        u = v.first;
        ex[v.second] = i;
        break;
      }
  }
  go(ds, as, ini, 1);
  go(dt, at, fin, -1);
  for (int i = 1; i <= m; i++)
    if (ex[i] == -1) {
      insert(ini[u[i]], fin[v[i]], ds[u[i]] + w[i] + dt[v[i]]);
      insert(ini[v[i]], fin[u[i]], ds[v[i]] + w[i] + dt[u[i]]);
    }
  mst.insert(1e18);
  for (int i = 0; i < (MX); i++) {
    for (long long k : st[i]) mst.insert(k);
    for (long long k : en[i]) mst.erase(mst.find(k));
    mn[i] = *mst.begin();
  }
  while (q--) {
    int t, x;
    cin >> t >> x;
    if (ex[t] == -1) {
      cout << min({dst, ds[u[t]] + x + dt[v[t]], ds[v[t]] + x + dt[u[t]]})
           << '\n';
    } else {
      cout << min({mn[ex[t]], ds[u[t]] + x + dt[v[t]], ds[v[t]] + x + dt[u[t]]})
           << '\n';
    }
  }
  return 0;
}
