#include <bits/stdc++.h>
long long int n, m, k;
typedef struct edges {
  long long int u;
  long long int v;
  double w;
  long long int id;
} edges;
edges e[100005], e1[100005];
long long int res[100005], fa[100005], sz;
using namespace std;
bool operator<(edges a, edges b) { return a.w < b.w; }
long long int find(long long int x) {
  if (fa[x] == x) return x;
  return fa[x] = find(fa[x]);
}
long long int fn(double x) {
  for (long long int i = 1; i <= m + 1; i++) {
    e1[i] = e[i];
    if (e1[i].u == 1)
      e1[i].w += x;
    else if (e1[i].v == 1)
      e1[i].w += x;
  }
  sort(e1 + 1, e1 + m + 1);
  for (long long int i = 1; i <= n; i++) fa[i] = i;
  long long int tot = 0;
  sz = 0;
  for (long long int i = 1; i <= m; i++) {
    long long int a, b;
    a = find(e1[i].u);
    b = find(e1[i].v);
    if (a == b) continue;
    fa[a] = b;
    if (e1[i].u == 1)
      tot++;
    else if (e1[i].v == 1)
      tot++;
    sz++;
    res[sz] = e1[i].id;
  }
  return tot;
}
double l = -1000000.0, r = 10000000.0;
int main() {
  scanf("%lld %lld %lld", &n, &m, &k);
  for (long long int i = 1; i <= m; i++) {
    scanf("%lld %lld %lf", &e[i].u, &e[i].v, &e[i].w);
    e[i].id = i;
  }
  for (long long int i = 1; i <= 100; i++) {
    double mid = (l + r) / 2;
    long long int tot = fn(mid);
    if (tot < k)
      r = mid;
    else if (tot > k)
      l = mid;
    else {
      cout << sz << endl;
      for (int i = 1; i <= sz; i++) cout << res[i] << " ";
      long long int ans = 0;
      return 0;
    }
  }
  cout << -1 << endl;
  return 0;
}
