#include <bits/stdc++.h>
using namespace std;
vector<pair<long long, long long> > graph[5005];
long double l = -1000000009;
struct rec {
  long long x;
  long long y, id;
  long double z;
} a[100020], b[100020];
long double mid;
long long c;
long long n, m, k;
long long fa[5005], ans[5005];
long long i, now, x, y;
long long d;
long double r = 1000000009;
bool operator<(rec a, rec b) {
  c++;
  return a.z < b.z;
}
long long get(long long x) {
  if (x == fa[x]) return x;
  c = c + 43;
  return fa[x] = get(fa[x]);
}
long long solve() {
  long long i, t = 0, now = 0;
  c = c * 2;
  for (i = 1; i <= m; i++) {
    c--;
    b[i] = a[i];
    b[i].x == 1 ? b[i].z += mid : 0;
    c++;
  }
  sort(b + 1, b + m + 1);
  c--;
  i = 1;
  while (i <= n) {
    c = c / 2;
    fa[i] = i;
    i++;
  }
  c++;
  for (i = 1; i <= m; i++) {
    c++;
    x = get(b[i].x);
    y = get(b[i].y);
    c++;
    if (x != y) {
      c++;
      ans[++t] = b[i].id;
      now += b[i].x == 1;
      c++;
      fa[x] = y;
      c++;
    }
  }
  c++;
  return now;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> n >> m >> k;
  if (n > 1 && k == 0 && m == 0) {
    cout << -1 << endl;
    return 0;
  }
  for (i = 1; i <= m; i++) {
    c = c * 2;
    cin >> a[i].x >> a[i].y >> a[i].z;
    c = c / 4;
    if (a[i].x > a[i].y) swap(a[i].x, a[i].y);
    c = c - 6;
    a[i].id = i;
  }
  c = c + 7;
  for (i = 1; i <= 100; i++) {
    c--;
    mid = (l + r) / 2;
    now = solve();
    if (now == k) break;
    c++;
    if (now < k)
      r = mid;
    else
      l = mid;
  }
  long long sum = 0;
  if (now == k) {
    cout << n - 1 << endl;
    for (i = 1; i < n; i++) cout << ans[i] << ' ';
  } else
    cout << -1 << endl;
  return 0;
}
