#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 10, mod = 1e9 + 7;
const long long inf = 1e18;
vector<pair<int, int> > v[maxn];
vector<int> vec;
vector<pair<long long, int> > vv[maxn];
long long ds1[maxn], ds2[maxn], val[maxn];
pair<pair<int, int>, long long> ed[maxn];
bool mark[maxn];
int pr[maxn], in[maxn];
void dij(int s, long long *ds) {
  priority_queue<pair<long long, long long>,
                 vector<pair<long long, long long> >,
                 greater<pair<long long, long long> > >
      pq;
  memset(mark, 0, sizeof mark);
  fill(ds, ds + maxn, inf);
  ds[s] = 0, pq.push({0, s});
  while (int((pq).size())) {
    int u = pq.top().second;
    pq.pop();
    if (mark[u]) continue;
    mark[u] = 1;
    for (pair<int, int> p : v[u]) {
      long long w = ds[u] + p.second;
      if (w < ds[p.first]) ds[p.first] = w, pq.push({w, p.first});
    }
  }
}
void dfs(int u, int par = -1) {
  mark[u] = 1;
  pr[u] = par;
  for (pair<int, int> p : v[u]) {
    if (mark[p.first] == 0 && ds1[u] + p.second == ds1[p.first])
      dfs(p.first, u);
  }
}
void put(int u, int c) {
  mark[u] = 1;
  in[u] = c;
  for (pair<int, int> p : v[u]) {
    if (mark[p.first] == 0 && ds1[u] + p.second == ds1[p.first])
      put(p.first, c);
  }
}
map<pair<pair<int, int>, int>, int> mp;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  int n, m, q;
  cin >> n >> m >> q;
  for (int i = 0; i < m; i++) {
    int a, b, c;
    cin >> a >> b >> c;
    v[a].push_back({b, c}), v[b].push_back({a, c});
    ed[i] = {{a, b}, c};
    mp[{{a, b}, c}] = i;
    mp[{{b, a}, c}] = i;
  }
  dij(1, ds1), dij(n, ds2);
  memset(mark, 0, sizeof mark), dfs(1);
  int tmp = n;
  while (tmp != 1) {
    vec.push_back(tmp);
    tmp = pr[tmp];
  }
  vec.push_back(1);
  reverse(vec.begin(), vec.end());
  memset(mark, 0, sizeof mark);
  for (int x : vec) {
    mark[x] = 1;
  }
  int C = 0;
  for (int x : vec) {
    put(x, C), C++;
  }
  priority_queue<pair<long long, long long>,
                 vector<pair<long long, long long> >,
                 greater<pair<long long, long long> > >
      pq;
  for (int i = 0; i < m; i++) {
    int A = ed[i].first.first, B = ed[i].first.second, C = ed[i].second;
    if (in[A] > in[B]) swap(A, B);
    if (in[A] + 1 == in[B] && A == vec[in[A]] && B == vec[in[B]] &&
        ds1[A] + C == ds1[B] && mp[{{A, B}, C}] == i)
      continue;
    vv[in[A]].push_back({ds1[A] + ds2[B] + C, in[B]});
  }
  for (int i = 0; i < int((vec).size()) - 1; i++) {
    for (auto x : vv[i]) pq.push(x);
    while (int((pq).size()) && pq.top().second <= i) pq.pop();
    if (pq.empty())
      val[i] = inf;
    else
      val[i] = pq.top().first;
  }
  while (q--) {
    int id, x;
    cin >> id >> x;
    --id;
    int A = ed[id].first.first, B = ed[id].first.second, C = ed[id].second;
    long long ans = min(ds1[A] + ds2[B] + x, ds1[B] + ds2[A] + x);
    if (in[A] > in[B]) swap(A, B);
    if (in[A] + 1 == in[B] && A == vec[in[A]] && B == vec[in[B]] &&
        ds1[A] + C == ds1[B] && mp[{{A, B}, C}] == id)
      ans = min(ans, val[in[A]]);
    else
      ans = min(ans, ds1[n]);
    cout << ans << "\n";
  }
  return 0;
}
