#include <bits/stdc++.h>
using namespace std;
int n, m, k, f[5005], ans, num, 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;
  ans = num = cnt = t[0] = 0;
  for (int i = 1, x, y; i <= m && cnt < n - 1; i++)
    if ((x = find(e[i].x)) != (y = find(e[i].y)) && num + (e[i].x == 1) <= k)
      f[x] = y, ans += e[i].p, num += (e[i].x == 1), cnt++, t[++t[0]] = e[i].id;
}
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 || num < k) return puts("-1"), 0;
  int l = -100000, r = 100000, mid;
  while (l < r) {
    Kruskal(mid = (l + r + 1) >> 1);
    if (num >= k)
      l = mid;
    else
      r = mid - 1;
  }
  Kruskal(l);
  printf("%d\n", t[0]);
  for (int i = 1; i <= t[0]; i++) printf("%d%c", t[i], i == t[0] ? 10 : 32);
}
