#include <bits/stdc++.h>
using namespace std;
struct edge {
  double w;
  int u, v, id;
  edge(int u = 0, int v = 0, double w = 0, int id = 0)
      : u(u), v(v), w(w), id(id) {}
  friend bool operator<(edge a, edge b) { return a.w < b.w; }
};
edge e[100100];
vector<int> res;
int fa[5010];
int n, m, k;
bool cmp(edge x, edge y) { return x.id < y.id; }
int find(int x) { return (fa[x] == x) ? x : fa[x] = find(fa[x]); }
bool unite(int x, int y) {
  x = find(x);
  y = find(y);
  if (x == y) return false;
  fa[x] = y;
  return true;
}
int check(double d) {
  sort(e + 1, e + 1 + m, cmp);
  for (int i = 1; i <= m; i++) {
    if (e[i].u == 1 || e[i].v == 1) {
      e[i].w += d;
    }
  }
  sort(e + 1, e + 1 + m);
  int cnt = 0;
  for (int i = 1; i <= n; i++) fa[i] = i;
  res.clear();
  for (int i = 1; i <= m; i++) {
    if (unite(e[i].u, e[i].v)) {
      res.push_back(e[i].id);
      if (e[i].u == 1 || e[i].v == 1) cnt++;
    }
  }
  for (int i = 1; i <= m; i++) {
    if (e[i].u == 1 || e[i].v == 1) {
      e[i].w -= d;
    }
  }
  return cnt;
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 1; i <= m; i++) {
    int u, v, w;
    scanf("%d%d%d", &u, &v, &w);
    e[i] = edge(u, v, w, i);
  }
  double l = -1e8, r = 1e8, mid;
  for (int _ = 0; _ < 100; _++) {
    mid = (l + r) / 2;
    int t = check(mid);
    if (t == k) {
      printf("%d\n", res.size());
      for (int i = 0; i < res.size(); i++) printf("%d ", res[i]);
      puts("");
      return 0;
    }
    if (t < k)
      r = mid;
    else
      l = mid;
  }
  puts("-1");
  return 0;
}
