#include <bits/stdc++.h>
using namespace std;
const long long INF = 1e5 + 7;
const long long MAX = 1e5;
const long long MOD = 1e9 + 7;
typedef vector<long long> vi;
typedef vector<vi> vvi;
typedef vector<pair<long long, long long> > vii;
typedef vector<vii> vvii;
typedef vector<bool> vb;
const long long maxn = 5005, maxm = 1e5 + 5;
long long n, m, k;
long long net, num;
vi parent, ans;
struct node {
  long long x, y, w, p, id;
  bool operator<(const node &B) const { return p == B.p ? x < B.x : p < B.p; }
} e[INF];
long long Find(long long a) {
  if (parent[a] == a) return a;
  return parent[a] = Find(parent[a]);
}
void Union(long long mid) {
  for (long long i = 1; i <= m; i++) e[i].p = e[i].w + (e[i].x == 1 ? mid : 0);
  sort(e + 1, e + 1 + m);
  for (long long i = 1; i <= n; i++) parent[i] = i;
  num = 0, net = 0;
  for (long long i = 1, x, y; i <= m && net < n - 1; i++)
    if ((x = Find(e[i].x)) != (y = Find(e[i].y)) && num + (e[i].x == 1) <= k)
      parent[x] = y, num += (e[i].x == 1), net++, ans[net] = e[i].id;
}
signed main() {
  cin >> n >> m >> k;
  parent.resize(n + 1), ans.resize(n + 1);
  vi band;
  band.push_back(0);
  for (long long i = 1; i <= m; i++) {
    cin >> e[i].x >> e[i].y >> e[i].w, e[i].id = i;
    band.push_back(e[i].w);
    if (e[i].x > e[i].y) swap(e[i].x, e[i].y);
  }
  Union(-MAX);
  if (net < n - 1 || num < k)
    cout << -1 << endl;
  else {
    long long start = -MAX, end = MAX;
    while (start < end) {
      long long mid = (start + end + 1) / 2;
      Union(mid);
      if (num >= k)
        start = mid;
      else
        end = mid - 1;
    }
    Union(start);
    long long sum = 0;
    cout << net << endl;
    for (long long i = 1; i <= net; i++)
      sum += band[ans[i]], cout << ans[i] << " ";
    cout << endl;
  }
  return 0;
}
