#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
const long long linf = 1e18;
int n, m, q, ptr[N];
long long dist[N], d[N];
int cost[N], start[N];
int A[N], B[N];
vector<pair<int, int>> g[N];
vector<int> ver[10 * N];
void update() {
  for (int v = 0; v < (n); ++v) {
    dist[v] += d[v];
    if (dist[v] > linf) dist[v] = linf;
  }
  for (int v = 0; v < (n); ++v)
    for (auto& item : g[v]) {
      int to = item.first;
      if (dist[v] == linf || dist[to] == linf) continue;
      cost[item.second] = start[item.second] + dist[v] - dist[to];
    }
}
void compute() {
  for (int i = 0; i < (n); ++i) dist[i] = linf;
  set<pair<int, int>> s;
  dist[0] = 0;
  s.insert({0, 0});
  while (!s.empty()) {
    int v = s.begin()->second;
    s.erase(s.begin());
    for (auto& item : g[v]) {
      int to = item.first;
      int c = cost[item.second];
      if (dist[to] > dist[v] + c) {
        s.erase({dist[to], to});
        dist[to] = dist[v] + c;
        s.insert({dist[to], to});
      }
    }
  }
  update();
}
void recalc(int m) {
  for (int i = 0; i < (n); ++i) d[i] = linf;
  for (int i = 0; i < (m + 1); ++i) ver[i].clear(), ptr[i] = 0;
  d[0] = 0;
  ver[0].push_back(0);
  for (int dst = 0; dst < (m + 1); ++dst) {
    for (int& i = ptr[dst]; i < (int)(ver[dst]).size(); ++i) {
      int v = ver[dst][i];
      if (d[v] < dst) continue;
      for (auto& item : g[v]) {
        int to = item.first;
        int id = item.second;
        if (d[to] > d[v] + cost[id]) {
          d[to] = d[v] + cost[id];
          if (d[to] <= m) ver[d[to]].push_back(to);
        }
      }
    }
  }
  update();
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cin >> n >> m >> q;
  for (int i = 0; i < (m); ++i) {
    int x, y, c;
    cin >> x >> y >> c;
    --x;
    --y;
    A[i] = x;
    B[i] = y;
    cost[i] = c;
    start[i] = c;
    g[x].emplace_back(y, i);
  }
  compute();
  int type;
  for (int i = 0; i < (q); ++i) {
    cin >> type;
    if (type == 1) {
      int v;
      cin >> v;
      --v;
      cout << (dist[v] == linf ? -1 : dist[v]) << '\n';
    } else {
      int size;
      cin >> size;
      for (int i = 0; i < (size); ++i) {
        int x;
        cin >> x;
        --x;
        ++cost[x];
        ++start[x];
      }
      recalc(size);
    }
  }
  return 0;
}
