#include <bits/stdc++.h>
using namespace std;
const int prime = 999983;
const int INF = 0x7FFFFFFF;
const long long INFF = 0x7FFFFFFFFFFFFFFF;
const double pi = acos(-1.0);
const double inf = 1e18;
const double eps = 1e-6;
const long long mod = 1e9 + 7;
long long qpow(long long a, long long b) {
  long long s = 1;
  while (b > 0) {
    if (b & 1) s = s * a % mod;
    a = a * a % mod;
    b >>= 1;
  }
  return s;
}
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
int dr[2][4] = {1, -1, 0, 0, 0, 0, -1, 1};
using namespace std;
const int N = 2e5 + 5;
int n, m, q, to[N << 1], nxt[N << 1], ww[N << 1], head[N];
int vis[N], o[N], len, pre[N], id[N], mrk[N];
long long dis[N], sid[N], tr[N << 2];
vector<int> E[N];
priority_queue<pair<long long, int>, vector<pair<long long, int>>,
               greater<pair<long long, int>>>
    Q;
void spfa(int s) {
  memset(dis, 63, sizeof(dis));
  memset(vis, 0, sizeof(vis));
  Q.push(make_pair(dis[s] = 0, s));
  pre[s] = 0;
  while (!Q.empty()) {
    int u = Q.top().second;
    Q.pop();
    if (vis[u]) continue;
    vis[u] = 1;
    for (int e = head[u]; e; e = nxt[e]) {
      int v = to[e], w = ww[e];
      if (dis[v] > dis[u] + w)
        pre[v] = e, Q.push(make_pair(dis[v] = dis[u] + w, v));
    }
  }
}
void dfs(int u) {
  for (int v : E[u]) {
    if (!id[v]) id[v] = id[u];
    dfs(v);
  }
}
void modify(int x, int l, int r, int ql, int qr, long long v) {
  if (l >= ql && r <= qr) {
    tr[x] = min(tr[x], v);
    return;
  }
  int mid = (l + r) >> 1;
  if (ql <= mid) modify(x << 1, l, mid, ql, qr, v);
  if (qr > mid) modify(x << 1 | 1, mid + 1, r, ql, qr, v);
}
long long query(int x, int l, int r, int p) {
  if (l == r) return tr[x];
  int mid = (l + r) >> 1;
  if (p <= mid)
    return min(tr[x], query(x << 1, l, mid, p));
  else
    return min(tr[x], query(x << 1 | 1, mid + 1, r, p));
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> m >> q;
  for (int i = 1, j = 1; i <= m; ++i) {
    int u, v, w;
    cin >> u >> v >> w;
    to[++j] = v;
    nxt[j] = head[u];
    ww[j] = w;
    head[u] = j;
    to[++j] = u;
    nxt[j] = head[v];
    ww[j] = w;
    head[v] = j;
  }
  spfa(n);
  memcpy(sid, dis, sizeof(sid));
  spfa(1);
  for (int i = n; i > 1; i = to[pre[i] ^ 1]) {
    o[++len] = i, mrk[pre[i] >> 1] = 1;
  }
  o[++len] = 1, reverse(o + 1, o + len + 1);
  for (int i = 1; i <= len; ++i) {
    id[o[i]] = i;
  }
  for (int i = 2; i <= n; ++i)
    if (pre[i]) {
      E[to[pre[i] ^ 1]].push_back(i);
    }
  dfs(1);
  memset(tr, 63, sizeof(tr));
  for (int i = 1; i <= n; ++i) {
    for (int e = head[i]; e; e = nxt[e]) {
      int u = i, v = to[e];
      if (id[u] >= id[v] || mrk[e >> 1]) continue;
      modify(1, 1, len, id[u], id[v] - 1, dis[u] + ww[e] + sid[v]);
    }
  }
  while (q--) {
    int x, y;
    cin >> x >> y;
    x <<= 1;
    if (mrk[x >> 1]) {
      if (id[to[x]] > id[to[x ^ 1]]) x ^= 1;
      printf("%lld\n", min(dis[n] - ww[x] + y, query(1, 1, len, id[to[x]])));
    } else {
      printf("%lld\n", min(dis[n], min(dis[to[x]] + sid[to[x ^ 1]],
                                       dis[to[x ^ 1]] + sid[to[x]]) +
                                       y));
    }
  }
}
