#include <bits/stdc++.h>
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
inline long long rand(long long x, long long y) {
  ++y;
  return (rng() % (y - x)) + x;
}
long long n, m, q, a, b, c, dist[3][200005], head[200005], id[200005],
    edgeid[200005], ans[200005];
vector<pair<pair<long long, long long>, long long>> adj[200005];
pair<pair<long long, long long>, long long> edge[200005];
priority_queue<pair<long long, long long>, vector<pair<long long, long long>>,
               greater<pair<long long, long long>>>
    pq;
vector<long long> mainpath, mainedge, bridges[200005];
bool ismainedge[200005], vis[200005], stopdfs;
void dijkstra(long long num) {
  while (!pq.empty()) {
    auto [d, x] = pq.top();
    pq.pop();
    if (d > dist[num][x]) continue;
    for (auto [t, t2] : adj[x]) {
      auto [it, nd] = t;
      if (dist[num][it] > d + nd) {
        dist[num][it] = d + nd;
        head[it] = head[x];
        pq.push(pair<long long, long long>(d + nd, it));
      }
    }
  }
}
void dfs(long long x) {
  mainpath.push_back(x);
  vis[x] = 1;
  if (x == n) {
    stopdfs = 1;
    return;
  }
  for (auto [t, idx] : adj[x]) {
    auto [it, nd] = t;
    if (vis[it] or dist[0][x] + nd + dist[1][it] != dist[0][n]) continue;
    if (stopdfs) return;
    ismainedge[idx] = 1;
    mainedge.push_back(idx);
    dfs(it);
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m >> q;
  for (long long i = (long long)1; i <= (long long)m; i++) {
    cin >> a >> b >> c;
    adj[a].push_back(pair<pair<long long, long long>, long long>(
        pair<long long, long long>(b, c), i));
    adj[b].push_back(pair<pair<long long, long long>, long long>(
        pair<long long, long long>(a, c), i));
    edge[i] = pair<pair<long long, long long>, long long>(
        pair<long long, long long>(a, b), c);
  }
  for (long long k = (long long)0; k <= (long long)2; k++)
    for (long long i = (long long)1; i <= (long long)n; i++)
      dist[k][i] = (long long)1e15;
  dist[0][1] = 0;
  pq.push(pair<long long, long long>(0, 1));
  dijkstra(0);
  dist[1][n] = 0;
  pq.push(pair<long long, long long>(0, n));
  dijkstra(1);
  dfs(1);
  for (auto it : mainpath)
    dist[2][it] = 0, head[it] = it, pq.push(pair<long long, long long>(0, it));
  for (long long i = (long long)0; i <= (long long)mainpath.size() - 1; i++)
    id[mainpath[i]] = i + 1;
  for (long long i = (long long)0; i <= (long long)mainedge.size() - 1; i++)
    edgeid[mainedge[i]] = i + 1;
  dijkstra(2);
  for (long long i = (long long)1; i <= (long long)m; i++)
    if (id[head[edge[i].first.first]] > id[head[edge[i].first.second]])
      swap(edge[i].first.first, edge[i].first.second);
  for (long long i = (long long)1; i <= (long long)m; i++)
    if (!ismainedge[i]) {
      auto [t, d] = edge[i];
      auto [a, b] = t;
      if (head[a] != head[b]) {
        assert(id[head[a]] < id[head[b]]);
        bridges[id[head[a]]].push_back(dist[0][a] + d + dist[1][b]);
        bridges[id[head[b]]].push_back(-(dist[0][a] + d + dist[1][b]));
      }
    }
  for (long long i = (long long)0; i <= (long long)m; i++)
    ans[i] = (long long)1e15;
  multiset<long long> second;
  for (long long i = (long long)1; i <= (long long)mainedge.size(); i++) {
    for (auto it : bridges[i]) {
      if (it > 0)
        second.insert(it);
      else
        second.erase(second.find(-it));
    }
    if (second.empty())
      ans[i] = (long long)1e15;
    else
      ans[i] = *second.begin();
  }
  while (q--) {
    cin >> a >> b;
    cout << min({(edgeid[a] != 0 ? (long long)1e15 : dist[0][n]),
                 ans[edgeid[a]],
                 min(dist[1][edge[a].first.first] + b +
                         dist[0][edge[a].first.second],
                     dist[0][edge[a].first.first] + b +
                         dist[1][edge[a].first.second])})
         << "\n";
  }
}
