#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:102400000,102400000")
using namespace std;
const int maxn = 5005;
double eps = 1e-6;
int pa[maxn];
int n, m;
int fin(int x) {
  if (pa[x] == x) return x;
  return pa[x] = fin(pa[x]);
}
struct edge {
  int x, y;
  double len;
  int id;
} e[maxn * 20], ne[maxn * 20];
bool operator<(edge a, edge b) { return a.len < b.len; }
int k;
double l, r;
int ans;
vector<int> out;
int check(double mid) {
  for (int i = 1; i <= m; i++) {
    ne[i] = e[i];
    if (ne[i].x != 1) ne[i].len += mid;
  }
  for (int i = 1; i <= n; i++) pa[i] = i;
  sort(ne + 1, ne + m + 1);
  vector<int> choice;
  int cc = 0;
  int dd = 0;
  for (int i = 1; i <= m; i++) {
    int x = ne[i].x, y = ne[i].y;
    if (x != 1) ne[i].len -= mid;
    if (fin(x) == fin(y)) continue;
    if (x == 1) dd++;
    choice.push_back(ne[i].id);
    cc += ne[i].len;
    pa[fin(x)] = fin(y);
  }
  if (dd > k) {
    r = mid;
    return 0;
  }
  if (dd < k) {
    l = mid;
    return 0;
  }
  if (cc < ans) {
    ans = cc, out = choice;
    return 1;
  }
}
int main() {
  cin >> n >> m >> k;
  ans = 0;
  for (int i = 1; i <= m; i++) {
    scanf("%d%d%lf", &e[i].x, &e[i].y, &e[i].len);
    if (e[i].x > e[i].y) swap(e[i].x, e[i].y);
    e[i].id = i;
    if (e[i].x == 1) ans++;
  }
  l = -1e5 - 50, r = 1e5 + 50;
  ans = 2e9;
  while (r - l > eps) {
    double nl = l, nr = r;
    double mid = (l + r) / 2;
    int kl = mid;
    if (abs(mid - (double)kl) <= eps)
      if (check(kl)) break;
    kl++;
    if (abs(mid - (double)kl) <= eps)
      if (check(kl)) break;
    l = nl, r = nr;
    if (check(mid)) break;
  }
  if (ans == 2e9) {
    cout << -1;
    exit(0);
  }
  cout << out.size() << "\n";
  for (int i = 0; i < out.size(); i++) printf("%d ", out[i]);
}
