#include <bits/stdc++.h>
using namespace std;
const long long maxn = 2e5, big = 1e18;
vector<long long> t(4 * maxn + 5, big);
void upd(long long v, long long l, long long r, long long tl, long long tr,
         long long val) {
  if (l >= r) return;
  if (tl >= r || tr <= l) return;
  if (tl >= l && tr <= r) {
    t[v] = min(t[v], val);
    return;
  }
  long long tm = (tl + tr) / 2;
  upd(2 * v, l, r, tl, tm, val);
  upd(2 * v + 1, l, r, tm, tr, val);
}
long long get(long long v, long long l, long long r, long long id) {
  if (id < l || id >= r) return big;
  if (l == r - 1) return t[v];
  long long m = (l + r) / 2;
  return min(t[v], min(get(2 * v, l, m, id), get(2 * v + 1, m, r, id)));
}
void solve() {
  long long n, m, qs;
  cin >> n >> m >> qs;
  vector<pair<long long, long long> > ed;
  vector<long long> ws;
  vector<pair<long long, pair<long long, long long> > > g[n];
  for (long long i = 0; i < m; ++i) {
    long long v, u, w;
    cin >> v >> u >> w;
    --v;
    --u;
    g[v].push_back({u, {w, i}});
    g[u].push_back({v, {w, i}});
    ed.push_back({v, u});
    ws.push_back(w);
  }
  vector<pair<long long, pair<long long, long long> > > ds(n, {big, {-1, -1}});
  ds[0].first = 0;
  set<pair<long long, long long> > q;
  q.insert({0, 0});
  while (!q.empty()) {
    long long v = q.begin()->second;
    q.erase(q.begin());
    for (auto el : g[v]) {
      long long u = el.first, w = el.second.first, id = el.second.second;
      if (ds[u].first > ds[v].first + w) {
        q.erase({ds[u].first, u});
        ds[u] = {ds[v].first + w, {v, id}};
        q.insert({ds[u].first, u});
      }
    }
  }
  vector<long long> mp;
  vector<long long> usd(m);
  long long tv = n - 1;
  while (tv != -1) {
    mp.push_back(tv);
    if (ds[tv].second.second != -1) usd[ds[tv].second.second] = 1;
    tv = ds[tv].second.first;
  }
  reverse(mp.begin(), mp.end());
  vector<long long> p(n, -1);
  for (long long i = 0; i < mp.size(); ++i) p[mp[i]] = i;
  vector<long long> l(n, -1), r(n, mp.size() + 1);
  for (long long i = 0; i < mp.size(); ++i) l[mp[i]] = i - 1;
  for (long long i = 0; i < mp.size(); ++i) r[mp[i]] = i;
  vector<long long> df(n, big);
  df[n - 1] = 0;
  q.insert({0, n - 1});
  while (!q.empty()) {
    long long v = q.begin()->second;
    q.erase(q.begin());
    for (auto el : g[v]) {
      long long u = el.first, w = el.second.first;
      if (df[u] > df[v] + w) {
        q.erase({df[u], u});
        df[u] = df[v] + w;
        if (p[u] == -1) r[u] = r[v];
        q.insert({df[u], u});
      }
    }
  }
  vector<long long> dds(n, big);
  dds[0] = 0;
  q.insert({0, 0});
  while (!q.empty()) {
    long long v = q.begin()->second;
    q.erase(q.begin());
    for (auto el : g[v]) {
      long long u = el.first, w = el.second.first;
      if (dds[u] > dds[v] + w) {
        q.erase({dds[u], u});
        dds[u] = dds[v] + w;
        if (p[u] == -1) l[u] = l[v];
        q.insert({dds[u], u});
      }
    }
  }
  for (long long i = 0; i < m; ++i) {
    long long v = ed[i].first, u = ed[i].second, w = ws[i];
    if (usd[i]) continue;
    upd(1, l[v] + 1, r[u], 0, mp.size() - 1, dds[v] + df[u] + ws[i]);
    upd(1, l[u] + 1, r[v], 0, mp.size() - 1, dds[u] + df[v] + ws[i]);
  }
  while (qs) {
    --qs;
    long long id, w;
    cin >> id >> w;
    --id;
    long long v = ed[id].first, u = ed[id].second, bw = ws[id];
    if (!usd[id]) {
      cout << min(dds[n - 1], min(dds[v] + df[u] + w, dds[u] + df[v] + w))
           << '\n';
      continue;
    }
    if (bw >= w) {
      cout << dds[n - 1] - bw + w << '\n';
      continue;
    }
    if (p[v] > p[u]) swap(v, u);
    cout << min(dds[n - 1] - bw + w, get(1, 0, mp.size() - 1, p[v])) << '\n';
  }
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  solve();
  return 0;
}
