#include <bits/stdc++.h>
using namespace std;
int n, m, k, num, tot, flag, cnt, ans = 1e9;
int fa[100010], st[100010];
struct point {
  int u, v, w, id;
} a[100010];
int find(int x) { return fa[x] == x ? x : fa[x] = find(fa[x]); }
bool cmp(point a1, point a2) {
  return a1.w < a2.w || (a1.w == a2.w && a1.u > a2.u);
}
void check() {
  num = tot = 0;
  for (int i = 1; i <= n; i++) fa[i] = i;
  sort(a + 1, a + 1 + m, cmp);
  for (int i = 1; i <= m; i++) {
    int x = find(a[i].u), y = find(a[i].v);
    if (x != y) {
      num += (a[i].u == 1);
      tot += a[i].w;
      fa[x] = y;
    }
  }
}
void get() {
  cnt = 0, tot = 0;
  for (int i = 1; i <= n; i++) fa[i] = i;
  sort(a + 1, a + 1 + m, cmp);
  for (int i = 1; i <= m; i++) {
    int x = find(a[i].u), y = find(a[i].v);
    if (x != y && tot + (a[i].u == 1) <= k) {
      tot += (a[i].u == 1);
      fa[x] = y;
      st[++cnt] = a[i].id;
    }
  }
}
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);
    if (u > v) swap(u, v);
    a[i] = (point){u, v, w, i};
  }
  int l = -1e5, r = 1e5;
  while (l <= r) {
    int mid = (l + r) / 2;
    for (int i = 1; i <= m; i++)
      if (a[i].u == 1) a[i].w += mid;
    check();
    if (num >= k)
      l = mid + 1, ans = mid, flag = true;
    else
      r = mid - 1;
    for (int i = 1; i <= m; i++)
      if (a[i].u == 1) a[i].w -= mid;
  }
  if (!flag) {
    puts("-1");
    return 0;
  }
  for (int i = 1; i <= m; i++)
    if (a[i].u == 1) a[i].w += ans;
  get();
  if (cnt < n - 1 || tot < k) {
    puts("-1");
    return 0;
  }
  printf("%d\n", n - 1);
  for (int i = 1; i < n; i++) printf("%d ", st[i]);
  return 0;
}
