#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
const long long INF = 1e15;
struct side {
  int to, w, nt;
} s[N];
int n, m, q, x, y, w, num, h[N], o, cnt;
long long d[N], f[N];
struct note {
  long long x;
  inline bool operator<(const note lyf) const { return d[x] > d[lyf.x]; }
};
priority_queue<note> que;
queue<int> g[N];
inline char nc(void) {
  static char ch[100010], *p1 = ch, *p2 = ch;
  return p1 == p2 && (p2 = (p1 = ch) + fread(ch, 1, 100010, stdin), p1 == p2)
             ? EOF
             : *p1++;
}
inline void read(int &a) {
  char c = nc();
  int f = 1;
  for (; !isdigit(c); c = nc())
    if (c == '-') f = -1;
  for (a = 0; isdigit(c); a = (a << 3) + (a << 1) + c - '0', c = nc())
    ;
  return (void)(a *= f);
}
inline void dij(void) {
  bool b[N] = {0};
  for (int i = 2; i <= n; ++i) d[i] = INF;
  que.push((note){1});
  while (!que.empty()) {
    note p = que.top();
    if (b[p.x]) continue;
    que.pop();
    for (int i = h[p.x]; i; i = s[i].nt)
      if (d[s[i].to] > d[p.x] + s[i].w) {
        d[s[i].to] = d[p.x] + s[i].w;
        if (!b[s[i].to]) que.push((note){s[i].to});
      }
  }
  return;
}
int main(void) {
  read(n), read(m), read(q);
  for (int i = 1; i <= m; ++i)
    read(x), read(y), read(w), s[++num] = (side){y, w, h[x]}, h[x] = num;
  dij();
  while (q--) {
    read(o), read(x);
    if (o == 1)
      printf("%lld\n", d[x] >= INF ? -1 : d[x]);
    else {
      for (int i = 1; i <= x; ++i) read(y), ++s[y].w;
      for (int i = 2; i <= n; ++i) f[i] = INF;
      g[cnt = 0].push(1);
      if (x >= n) x = n - 1;
      for (int i = 0; i <= cnt; ++i)
        while (!g[i].empty()) {
          int p = g[i].front();
          g[i].pop();
          if (i > f[p]) continue;
          for (int i = h[p]; i; i = s[i].nt) {
            long long tmp = d[p] + s[i].w - d[s[i].to] + f[p];
            if (f[s[i].to] > tmp) {
              f[s[i].to] = tmp;
              if (tmp <= x) g[tmp].push(s[i].to), cnt = max(1ll * cnt, tmp);
            }
          }
        }
      for (int i = 2; i <= n; ++i) d[i] = min(INF, d[i] + f[i]);
    }
  }
  return 0;
}
