#include <bits/stdc++.h>
using namespace std;
int n, m, k, f[5005], ans, taken, cnt, t[5005];
struct node {
  int x, y, w, p, id;
  bool operator<(const node &B) const { return p == B.p ? x < B.x : p < B.p; }
} e[100005];
int find(int x) { return x == f[x] ? x : f[x] = find(f[x]); }
void Kruskal(int mid) {
  for (int i = 1; i <= m; i++) e[i].p = e[i].w + (e[i].x == 1 ? mid : 0);
  sort(e + 1, e + 1 + m);
  for (int i = 1; i <= n; i++) f[i] = i;
  taken = 0;
  cnt = 0;
  for (int i = 1; i <= m; i++) {
    int u = e[i].x, v = e[i].y;
    u = find(u);
    v = find(v);
    if (u == v) continue;
    if (e[i].x == 1 and taken == k) continue;
    taken += (e[i].x == 1);
    t[++cnt] = e[i].id;
    f[v] = u;
  }
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 1; i <= m; i++) {
    scanf("%d%d%d", &e[i].x, &e[i].y, &e[i].w), e[i].id = i;
    if (e[i].x > e[i].y) swap(e[i].x, e[i].y);
  }
  Kruskal(-100000);
  if (cnt < n - 1 || taken < k) return puts("-1"), 0;
  int l = -100000, r = 100000, mid, z;
  while (l <= r) {
    mid = l + (r - l) / 2;
    Kruskal(mid);
    if (taken >= k) {
      z = mid;
      l = mid + 1;
    } else
      r = mid - 1;
  }
  Kruskal(z);
  printf("%d\n", n - 1);
  for (int i = 1; i < n; i++) printf("%d ", t[i]);
  cout << endl;
}
