#include <bits/stdc++.h>
using namespace std;
const int N = 5e3 + 2, M = 1e5 + 5;
int n, m, k, par[N];
vector<int> vec;
struct edge {
  int u, v, i;
  long double w;
} e[M];
int getPar(int u) { return ~par[u] ? par[u] = getPar(par[u]) : u; }
bool check(double x) {
  for (int i = 0; i < m; i++) e[i].w += (!e[i].u || !e[i].v) * x;
  memset(par, -1, sizeof par);
  sort(e, e + m,
       [](edge x, edge y) { return x.w != y.w ? x.w < y.w : x.i < y.i; });
  int cnt = 0;
  for (int i = 0, x, y; i < m; i++)
    if ((x = getPar(e[i].u)) ^ (y = getPar(e[i].v))) {
      par[x] = y;
      vec.push_back(e[i].i);
      cnt += (!e[i].u || !e[i].v);
    }
  for (int i = 0; i < m; i++) e[i].w -= (!e[i].u || !e[i].v) * x;
  if (cnt == k) {
    cout << n - 1 << endl;
    for (int x : vec) cout << x + 1 << ' ';
    exit(0);
  }
  vec.clear();
  return cnt < k;
}
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0);
  cin >> n >> m >> k;
  for (int i = 0; i < m; i++) {
    cin >> e[i].u >> e[i].v >> e[i].w;
    e[i].u--, e[i].v--, e[i].i = i;
  }
  for (double l = -1e9, r = 1e9, i = 0; i < 100; i++) {
    double mid = (l + r) / 2;
    (check(mid) ? r : l) = mid;
  }
  cout << -1 << endl;
}
