#include <bits/stdc++.h>
using namespace std;
const long long maxn = 1000010;
const double Pi = acos(-1.0);
template <class T>
void read(T &x) {
  x = 0;
  long long f = 0;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    f |= (ch == '-');
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = (x << 1) + (x << 3) + (ch ^ 48);
    ch = getchar();
  }
  x = f ? -x : x;
  return;
}
long long n, m, q, fa[maxn];
long long head[maxn], cnt = 1, l[maxn], r[maxn], path[maxn], tot;
long long dis1[maxn], dis2[maxn], vis[maxn], id[maxn], book[maxn], eid[maxn];
long long minn[maxn << 2], ans[maxn], tag[maxn << 2], newp, dis[maxn];
struct node {
  long long next;
  long long to;
  long long num;
} e[maxn << 1];
void add(long long from, long long to, long long num) {
  e[++cnt].next = head[from];
  e[cnt].to = to;
  e[cnt].num = num;
  head[from] = cnt;
}
void bfs(long long x, long long *dis, long long *f) {
  queue<long long> q;
  q.push(path[x]);
  f[path[x]] = x;
  while (!q.empty()) {
    long long u = q.front();
    q.pop();
    for (long long i = head[u]; i; i = e[i].next) {
      long long v = e[i].to;
      if (!f[v] && !id[v] && dis[u] + e[i].num == dis[v]) {
        f[v] = x;
        q.push(v);
      }
    }
  }
}
void dijkstra(long long x) {
  memset(dis, 0x3f, sizeof(dis));
  memset(vis, 0, sizeof(vis));
  dis[x] = 0;
  priority_queue<pair<long long, long long> > q;
  q.push(make_pair(0, x));
  while (!q.empty()) {
    long long u = q.top().second;
    q.pop();
    if (vis[u]) continue;
    vis[u] = 1;
    for (long long i = head[u]; i; i = e[i].next) {
      long long v = e[i].to;
      if (dis[v] > dis[u] + e[i].num) {
        dis[v] = dis[u] + e[i].num;
        q.push(make_pair(-dis[v], v));
      }
    }
  }
}
void build(long long l, long long r, long long rt) {
  minn[rt] = tag[rt] = 0x3f3f3f3f3f3f3f3f;
  if (l == r) return;
  long long mid = (l + r) >> 1;
  build(l, mid, rt << 1);
  build(mid + 1, r, rt << 1 | 1);
}
void pushup(long long rt) { minn[rt] = min(minn[rt << 1], minn[rt << 1 | 1]); }
void pushdown(long long rt) {
  if (tag[rt]) {
    minn[rt << 1] = min(minn[rt << 1], tag[rt]);
    minn[rt << 1 | 1] = min(minn[rt << 1 | 1], tag[rt]);
    tag[rt << 1] = min(tag[rt << 1], tag[rt]);
    tag[rt << 1 | 1] = min(tag[rt << 1 | 1], tag[rt]);
    tag[rt] = 0x3f3f3f3f3f3f3f3f;
  }
}
void update(long long L, long long R, long long x, long long l, long long r,
            long long rt) {
  if (L <= l && r <= R) {
    minn[rt] = min(minn[rt], x);
    tag[rt] = min(tag[rt], x);
    return;
  }
  long long mid = (l + r) >> 1;
  pushdown(rt);
  if (L <= mid) update(L, R, x, l, mid, rt << 1);
  if (R > mid) update(L, R, x, mid + 1, r, rt << 1 | 1);
  pushup(rt);
}
long long query(long long x, long long l, long long r, long long rt) {
  if (l == r) return minn[rt];
  long long mid = (l + r) >> 1;
  long long ans = 0x3f3f3f3f3f3f3f3f;
  pushdown(rt);
  if (x <= mid)
    ans = min(ans, query(x, l, mid, rt << 1));
  else
    ans = min(ans, query(x, mid + 1, r, rt << 1 | 1));
  return ans;
}
signed main() {
  scanf("%lld%lld%lld", &n, &m, &q);
  for (long long i = 1; i <= m; i++) {
    long long a, b, c;
    scanf("%lld%lld%lld", &a, &b, &c);
    add(a, b, c);
    add(b, a, c);
  }
  dijkstra(1);
  for (long long i = 1; i <= n; i++) dis1[i] = dis[i];
  dijkstra(n);
  for (long long i = 1; i <= n; i++) dis2[i] = dis[i];
  long long u = 1;
  while (u < n) {
    path[++tot] = u;
    id[u] = tot;
    for (long long i = head[u]; i; i = e[i].next) {
      long long v = e[i].to;
      if (dis2[v] + e[i].num == dis2[u]) {
        book[i] = 1;
        eid[i] = tot;
        u = v;
        break;
      }
    }
  }
  path[++tot] = n;
  id[n] = tot;
  for (long long i = 1; i <= tot; i++) {
    bfs(i, dis1, l);
    bfs(i, dis2, r);
  }
  tot--;
  build(1, tot, 1);
  for (long long u = 1; u <= n; u++)
    for (long long i = head[u]; i; i = e[i].next) {
      long long v = e[i].to;
      if (!book[i] && l[u] < r[v])
        update(l[u], r[v] - 1, dis1[u] + e[i].num + dis2[v], 1, tot, 1);
    }
  for (long long i = 1; i <= tot; i++) ans[i] = query(i, 1, tot, 1);
  while (q--) {
    long long t, x;
    scanf("%lld%lld", &t, &x);
    long long mich = 0x3f3f3f3f3f3f3f3f;
    long long u = e[t << 1 | 1].to;
    long long v = e[t << 1].to;
    long long w = e[t << 1].num;
    mich = min(dis1[u] + x + dis2[v], dis1[v] + x + dis2[u]);
    if (x > w) {
      if (book[t << 1])
        mich = min(mich, ans[eid[t << 1]]);
      else if (book[t << 1 | 1])
        mich = min(mich, ans[eid[t << 1 | 1]]);
      else
        mich = min(mich, dis1[n]);
    } else {
      if (book[t << 1])
        mich = min(mich, dis1[n] - w + x);
      else
        mich = min(mich, dis1[n]);
    }
    printf("%lld\n", mich);
  }
  return 0;
}
