#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int n, m, k, h[N], tot;
long long d[N], del[N];
struct edge {
  int to, val, nxt;
} e[N];
void Add(int u, int v, int w) {
  e[++tot] = (edge){v, w, h[u]};
  h[u] = tot;
}
struct node {
  int id;
  long long dis;
  bool operator<(node b) const { return dis > b.dis; }
};
bool vis[N];
priority_queue<node> q;
void dijk() {
  memset(d, 0x3f, sizeof(d));
  d[1] = 0;
  q.push((node){1, 0});
  while (!q.empty()) {
    int u = q.top().id;
    q.pop();
    if (vis[u]) continue;
    vis[u] = 1;
    for (int i = h[u]; i; i = e[i].nxt) {
      int v = e[i].to;
      if (d[u] + e[i].val < d[v]) {
        d[v] = d[u] + e[i].val;
        q.push((node){v, d[v]});
      }
    }
  }
}
vector<int> g[N];
void bfs(long long M) {
  memset(vis, 0, sizeof(vis));
  memset(del, 0x3f, sizeof(del));
  del[1] = 0;
  int mx = 0;
  g[0].push_back(1);
  for (int i = 0; i <= mx; i++) {
    for (int j = 0; j < g[i].size(); j++) {
      int u = g[i][j], v, w;
      if (vis[u]) continue;
      vis[u] = 1;
      for (int k = h[u]; k; k = e[k].nxt) {
        v = e[k].to, w = d[u] + e[k].val - d[v];
        if (del[u] + w > M) continue;
        if (del[u] + w < del[v]) {
          del[v] = del[u] + w;
          g[del[v]].push_back(v);
          if (del[v] > mx) mx = del[v];
        }
      }
    }
  }
  for (int i = 0; i <= mx; i++) g[i].clear();
  for (int i = 1; i <= n; i++) {
    d[i] += del[i];
    if (d[i] > d[0]) d[i] = d[0];
  }
}
int Min(int a, int b) { return a < b ? a : b; }
char ch;
void read(int &x) {
  while (ch = getchar(), ch == ' ' || ch == '\n')
    ;
  x = (ch ^ 48);
  while (ch = getchar(), ch != ' ' && ch != '\n')
    x = (x << 3) + (x << 1) + (ch ^ 48);
}
int main() {
  read(n);
  read(m);
  read(k);
  for (int i = 1, u, v, w; i <= m; i++) {
    read(u);
    read(v);
    read(w);
    Add(u, v, w);
  }
  dijk();
  for (int i = 1, op, c, l; i <= k; i++) {
    read(op);
    read(c);
    if (op == 1) {
      printf("%lld\n", d[c] == d[0] ? -1 : d[c]);
    } else {
      for (int j = 1; j <= c; j++) {
        read(l);
        e[l].val++;
      }
      bfs(1ll * Min(c, n - 1));
    }
  }
}
