#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int x = 0, f = 1;
  char p = getchar();
  while (!isdigit(p)) {
    if (p == '-') f = -1;
    p = getchar();
  }
  while (isdigit(p)) x = (x << 3) + (x << 1) + (p ^ 48), p = getchar();
  return x * f;
}
const int maxn = 1e5 + 5;
int n, m, k, f[maxn], ans, vec[maxn], s, vis[maxn];
inline int find(int x) {
  if (x == f[x])
    return f[x];
  else
    return f[x] = find(f[x]);
}
struct node {
  int x, y, z, tag, id;
} a[maxn];
inline bool cmp(node a, node b) {
  if (a.z == b.z) return a.tag < b.tag;
  return a.z < b.z;
}
inline bool cmp2(node a, node b) {
  if (a.z == b.z) return a.tag > b.tag;
  return a.z < b.z;
}
inline bool check() {
  for (int i = 1; i <= n; i++) f[i] = i;
  int tot = 0;
  sort(a + 1, a + 1 + m, cmp);
  for (int i = 1; i <= m; i++) {
    int x = a[i].x, y = a[i].y;
    if (find(x) == find(y)) continue;
    f[find(x)] = find(y);
    tot += a[i].tag;
  }
  return tot <= k;
}
int main() {
  n = read();
  m = read();
  k = read();
  for (int i = 1; i <= m; i++) {
    int x = read(), y = read();
    if (x > y) swap(x, y);
    a[i].id = i;
    a[i].x = x;
    a[i].y = y;
    a[i].z = read();
    if (x == 1) a[i].tag = 1;
  }
  int l = -100001, r = 100001;
  while (l <= r) {
    int mid = (l + r) / 2;
    for (int i = 1; i <= m; i++)
      if (a[i].tag) a[i].z += mid;
    if (check())
      ans = mid, r = mid - 1;
    else
      l = mid + 1;
    for (int i = 1; i <= m; i++)
      if (a[i].tag) a[i].z -= mid;
  }
  int used = 0;
  for (int i = 1; i <= m; i++)
    if (a[i].tag) a[i].z += ans;
  sort(a + 1, a + 1 + m, cmp);
  for (int i = 1; i <= n; i++) f[i] = i;
  for (int i = 1; i <= m; i++) {
    int x = a[i].x, y = a[i].y;
    if (find(x) == find(y)) continue;
    if (a[i].tag) vis[a[i].id] = 1;
    f[find(x)] = find(y);
  }
  for (int i = 1; i <= n; i++) f[i] = i;
  for (int i = 1; i <= m; i++) {
    if (vis[a[i].id]) {
      int x = a[i].x, y = a[i].y;
      if (find(x) == find(y)) continue;
      vec[++s] = a[i].id;
      f[find(x)] = find(y);
      used++;
    }
  }
  if (used > k) {
    cout << -1 << endl;
    return 0;
  }
  sort(a + 1, a + 1 + m, cmp2);
  for (int i = 1; i <= m; i++) {
    int x = a[i].x, y = a[i].y;
    if (find(x) == find(y) || vis[a[i].id]) continue;
    if (used == k && a[i].tag) continue;
    f[find(x)] = find(y);
    used += a[i].tag;
    vec[++s] = a[i].id;
  }
  if (used != k || s != n - 1) {
    cout << -1 << endl;
    return 0;
  }
  cout << n - 1 << endl;
  for (int i = 1; i <= s; i++) cout << vec[i] << " ";
  cout << endl;
  return 0;
}
