#include <bits/stdc++.h>
using namespace std;
const int maxn = 100001;
long long inf;
int n, m, q;
int fr, to[maxn], c[maxn];
vector<int> g[maxn];
long long dis[maxn];
int inc[maxn];
void dij() {
  memset(dis, 10, sizeof dis);
  inf = dis[0];
  dis[0] = 0;
  set<pair<int, int> > s;
  s.insert({0, 0});
  while (s.size()) {
    int v = s.begin()->second;
    s.erase(s.begin());
    for (int i : g[v]) {
      int u = to[i];
      if (dis[v] + c[i] < dis[u]) {
        s.erase({dis[u], u});
        dis[u] = dis[v] + c[i];
        s.insert({dis[u], u});
      }
    }
  }
}
int k = 0;
void heal() {
  if (!k) return;
  memset(inc, 10, sizeof inc);
  inc[0] = 0;
  vector<int> q[k + 1];
  q[0].push_back(0);
  for (int d = 0; d <= k; d++)
    for (int i = 0; i < q[d].size(); i++) {
      int v = q[d][i];
      if (inc[v] != -1) {
        dis[v] += d;
        inc[v] = -1;
        for (int j : g[v]) {
          int u = to[j];
          if (inc[u] != -1 and dis[v] + c[j] < dis[u] + inc[u]) {
            inc[u] = dis[v] + c[j] - dis[u];
            if (inc[u] <= k) q[inc[u]].push_back(u);
          }
        }
      }
    }
  k = 0;
}
int32_t main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m >> q;
  for (int i = 0; i < m; i++) {
    cin >> fr >> to[i] >> c[i];
    fr--, to[i]--;
    g[fr].push_back(i);
  }
  dij();
  for (int t, k, i; q--;) {
    cin >> t >> k;
    if (t == 1) {
      heal();
      cout << (dis[k - 1] < inf ? dis[k - 1] : -1) << "\n";
    } else {
      ::k += k;
      for (; k--;) {
        cin >> i;
        c[i - 1]++;
      }
    }
  }
  return 0;
}
