/// no time to waste
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned ll
#define ld long double
#define eb emplace_back
#define ef emplace_front
#define pii pair <int, int>
#define pli pair <ll, int>
#define pll pair <ll, ll>
#define pci pair <char, int>
#define pil pair <int, ll>
#define pic pair <int, char>
#define pib pair <int, bool>
#define pbi pair <bool, int>
#define pcc pair <char, char>
#define fi first
#define se second
#define all(ac) ac.begin(), ac.end()
#define MASK(x) (1 << (x))
#define ub(i, j) (((i) >> (j)) & 1)
#define FBIT(x) (MASK(x) - 1)
#define FLIP(x, y) (FBIT(x) ^ (y))
#define bit_count(x) (int) (__builtin_popcount(x))
#define bit_countll(x) (int) (__builtin_popcountll(x))
#define ii make_pair
#define int128 __int128_t
#define SZ(x) ((int) x.size())
#define UNIQUE(IV) (sort(all(IV)), IV.erase(unique(all(IV)), IV.end()))
#define multi 0
struct DSU {
int n;
vector <int> lab;
DSU(int n = 0): n(n), lab(n + 1, -1) {}
int find(int u) {
return lab[u] < 0 ? u : lab[u] = find(lab[u]);
}
bool join(int a, int b) {
a = find(a);
b = find(b);
if(a != b) {
if(lab[a] > lab[b]) swap(a, b);
lab[a] += lab[b];
lab[b] = a;
return 1;
}
return 0;
}
} dsu;
const int MX = 1004;
int n, m, k;
ll dis[MASK(12)];
struct edge {
int u, v, w;
edge(int u = 0, int v = 0, int w = 0): u(u), v(v), w(w) {}
bool operator <(const edge &other) const {
return w < other.w;
}
} e[MX];
bool ok(int u, int mask) {
return u < k || ub(mask, u - k);
}
int head[MX], nxt[MX << 1], ecnt;
pii to[MX << 1];
void add_edge(int x, int y, int w) {
to[++ecnt] = pii(y, w);
nxt[ecnt] = head[x];
head[x] = ecnt;
return;
}
ll ans[MX][MASK(10)];
struct node {
int u, mask;
ll dis;
node(int u = 0, int mask = 0, ll dis = 0): u(u), mask(mask), dis(dis) {}
bool operator <(const node &other) const {
return dis > other.dis;
}
};
void Dij() {
priority_queue <node> pq;
memset(ans, 63, sizeof ans);
for(int i = 1; i <= k; i++) {
ans[i][MASK(i - 1)] = 0;
pq.emplace(i, MASK(i - 1), 0);
}
while(SZ(pq)) {
node u = pq.top();
pq.pop();
if(u.dis != ans[u.u][u.mask]) continue;
for(int i = head[u.u]; i > 0; i = nxt[i]) {
int v, w;
tie(v, w) = to[i];
ll cost = w + u.dis;
if(ans[v][u.mask] > cost) {
ans[v][u.mask] = cost;
pq.emplace(v, u.mask, cost);
}
int T = FLIP(k, u.mask);
for(int mask = 1; mask < T; mask++) {
int nm = mask | u.mask;
if(ans[v][nm] > w + u.dis + ans[v][mask]) {
ans[v][nm] = w + u.dis + ans[v][mask];
pq.emplace(v, nm, ans[v][nm]);
}
}
}
}
return;
}
void solveK() {
for(int i = 1; i <= m; i++) {
add_edge(e[i].u, e[i].v, e[i].w);
add_edge(e[i].v, e[i].u, e[i].w);
}
Dij();
for(int i = k; i <= n; i++) cout << ans[i][FBIT(k)] << '\n';
return;
}
void solve() {
cin >> n >> m >> k;
for(int i = 1; i <= m; i++) cin >> e[i].u >> e[i].v >> e[i].w;
if(k <= 10) return solveK(), void();
sort(e + 1, e + m + 1);
dsu = DSU(n);
memset(dis, 63, sizeof dis);
int F = n - k + 1;
for(int mask = 1; mask < MASK(F); mask++) {
ll cur = 0, mst = 0;
for(int i = 1; i <= m; i++) if(ok(e[i].u, mask) && ok(e[i].v, mask)) {
if(dsu.join(e[i].u, e[i].v)) {
cur += e[i].w;
mst++;
}
}
if(mst == bit_count(mask) + k - 2) dis[mask] = cur;
fill(all(dsu.lab), -1);
}
for(int i = k; i <= n; i++) {
ll res = 1e18;
int tmp = MASK(i - k);
for(int mask = tmp; mask < MASK(F); mask = (mask + 1) | tmp) {
res = min(res, dis[mask]);
}
cout << res << '\n';
}
return;
}
int32_t main() {
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
#define task "tet"
if(fopen(task".inp", "r")) {
freopen(task".inp", "r", stdin);
freopen(task".out", "w", stdout);
}
int testcase = multi == 2 ? 1e9 : 1; if(multi == 1) cin >> testcase;
while(testcase--) solve();
return 0;
}
Ly8vIG5vIHRpbWUgdG8gd2FzdGUKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgdWxsIHVuc2lnbmVkIGxsCiNkZWZpbmUgbGQgbG9uZyBkb3VibGUKI2RlZmluZSBlYiBlbXBsYWNlX2JhY2sKI2RlZmluZSBlZiBlbXBsYWNlX2Zyb250CiNkZWZpbmUgcGlpIHBhaXIgPGludCwgaW50PgojZGVmaW5lIHBsaSBwYWlyIDxsbCwgaW50PgojZGVmaW5lIHBsbCBwYWlyIDxsbCwgbGw+CiNkZWZpbmUgcGNpIHBhaXIgPGNoYXIsIGludD4KI2RlZmluZSBwaWwgcGFpciA8aW50LCBsbD4KI2RlZmluZSBwaWMgcGFpciA8aW50LCBjaGFyPgojZGVmaW5lIHBpYiBwYWlyIDxpbnQsIGJvb2w+CiNkZWZpbmUgcGJpIHBhaXIgPGJvb2wsIGludD4KI2RlZmluZSBwY2MgcGFpciA8Y2hhciwgY2hhcj4KI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIGFsbChhYykgYWMuYmVnaW4oKSwgYWMuZW5kKCkKI2RlZmluZSBNQVNLKHgpICgxIDw8ICh4KSkKI2RlZmluZSB1YihpLCBqKSAoKChpKSA+PiAoaikpICYgMSkKI2RlZmluZSBGQklUKHgpIChNQVNLKHgpIC0gMSkKI2RlZmluZSBGTElQKHgsIHkpIChGQklUKHgpIF4gKHkpKQojZGVmaW5lIGJpdF9jb3VudCh4KSAoaW50KSAoX19idWlsdGluX3BvcGNvdW50KHgpKQojZGVmaW5lIGJpdF9jb3VudGxsKHgpIChpbnQpIChfX2J1aWx0aW5fcG9wY291bnRsbCh4KSkKI2RlZmluZSBpaSBtYWtlX3BhaXIKI2RlZmluZSBpbnQxMjggX19pbnQxMjhfdAojZGVmaW5lIFNaKHgpICgoaW50KSB4LnNpemUoKSkKI2RlZmluZSBVTklRVUUoSVYpIChzb3J0KGFsbChJVikpLCBJVi5lcmFzZSh1bmlxdWUoYWxsKElWKSksIElWLmVuZCgpKSkKI2RlZmluZSBtdWx0aSAwCgpzdHJ1Y3QgRFNVIHsKICAgIGludCBuOwogICAgdmVjdG9yIDxpbnQ+IGxhYjsKCiAgICBEU1UoaW50IG4gPSAwKTogbihuKSwgbGFiKG4gKyAxLCAtMSkge30KCiAgICBpbnQgZmluZChpbnQgdSkgewogICAgICAgIHJldHVybiBsYWJbdV0gPCAwID8gdSA6IGxhYlt1XSA9IGZpbmQobGFiW3VdKTsKICAgIH0KCiAgICBib29sIGpvaW4oaW50IGEsIGludCBiKSB7CiAgICAgICAgYSA9IGZpbmQoYSk7CiAgICAgICAgYiA9IGZpbmQoYik7CgogICAgICAgIGlmKGEgIT0gYikgewogICAgICAgICAgICBpZihsYWJbYV0gPiBsYWJbYl0pIHN3YXAoYSwgYik7CiAgICAgICAgICAgIGxhYlthXSArPSBsYWJbYl07CiAgICAgICAgICAgIGxhYltiXSA9IGE7CgogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAwOwogICAgfQp9IGRzdTsKCmNvbnN0IGludCBNWCA9IDEwMDQ7CmludCBuLCBtLCBrOwpsbCBkaXNbTUFTSygxMildOwoKc3RydWN0IGVkZ2UgewogICAgaW50IHUsIHYsIHc7CiAgICBlZGdlKGludCB1ID0gMCwgaW50IHYgPSAwLCBpbnQgdyA9IDApOiB1KHUpLCB2KHYpLCB3KHcpIHt9CgogICAgYm9vbCBvcGVyYXRvciA8KGNvbnN0IGVkZ2UgJm90aGVyKSBjb25zdCB7CiAgICAgICAgcmV0dXJuIHcgPCBvdGhlci53OwogICAgfQp9IGVbTVhdOwoKYm9vbCBvayhpbnQgdSwgaW50IG1hc2spIHsKICAgIHJldHVybiB1IDwgayB8fCB1YihtYXNrLCB1IC0gayk7Cn0KCmludCBoZWFkW01YXSwgbnh0W01YIDw8IDFdLCBlY250OwpwaWkgdG9bTVggPDwgMV07Cgp2b2lkIGFkZF9lZGdlKGludCB4LCBpbnQgeSwgaW50IHcpIHsKICAgIHRvWysrZWNudF0gPSBwaWkoeSwgdyk7CiAgICBueHRbZWNudF0gPSBoZWFkW3hdOwogICAgaGVhZFt4XSA9IGVjbnQ7CgogICAgcmV0dXJuOwp9CgpsbCBhbnNbTVhdW01BU0soMTApXTsKCnN0cnVjdCBub2RlIHsKICAgIGludCB1LCBtYXNrOwogICAgbGwgZGlzOwogICAgbm9kZShpbnQgdSA9IDAsIGludCBtYXNrID0gMCwgbGwgZGlzID0gMCk6IHUodSksIG1hc2sobWFzayksIGRpcyhkaXMpIHt9CgogICAgYm9vbCBvcGVyYXRvciA8KGNvbnN0IG5vZGUgJm90aGVyKSBjb25zdCB7CiAgICAgICAgcmV0dXJuIGRpcyA+IG90aGVyLmRpczsKICAgIH0KfTsKCnZvaWQgRGlqKCkgewogICAgcHJpb3JpdHlfcXVldWUgPG5vZGU+IHBxOwogICAgbWVtc2V0KGFucywgNjMsIHNpemVvZiBhbnMpOwoKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gazsgaSsrKSB7CiAgICAgICAgYW5zW2ldW01BU0soaSAtIDEpXSA9IDA7CiAgICAgICAgcHEuZW1wbGFjZShpLCBNQVNLKGkgLSAxKSwgMCk7CiAgICB9CgogICAgd2hpbGUoU1oocHEpKSB7CiAgICAgICAgbm9kZSB1ID0gcHEudG9wKCk7CiAgICAgICAgcHEucG9wKCk7CgogICAgICAgIGlmKHUuZGlzICE9IGFuc1t1LnVdW3UubWFza10pIGNvbnRpbnVlOwoKICAgICAgICBmb3IoaW50IGkgPSBoZWFkW3UudV07IGkgPiAwOyBpID0gbnh0W2ldKSB7CiAgICAgICAgICAgIGludCB2LCB3OwogICAgICAgICAgICB0aWUodiwgdykgPSB0b1tpXTsKCiAgICAgICAgICAgIGxsIGNvc3QgPSB3ICsgdS5kaXM7CiAgICAgICAgICAgIGlmKGFuc1t2XVt1Lm1hc2tdID4gY29zdCkgewogICAgICAgICAgICAgICAgYW5zW3ZdW3UubWFza10gPSBjb3N0OwogICAgICAgICAgICAgICAgcHEuZW1wbGFjZSh2LCB1Lm1hc2ssIGNvc3QpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbnQgVCA9IEZMSVAoaywgdS5tYXNrKTsKICAgICAgICAgICAgZm9yKGludCBtYXNrID0gMTsgbWFzayA8IFQ7IG1hc2srKykgewogICAgICAgICAgICAgICAgaW50IG5tID0gbWFzayB8IHUubWFzazsKICAgICAgICAgICAgICAgIGlmKGFuc1t2XVtubV0gPiB3ICsgdS5kaXMgKyBhbnNbdl1bbWFza10pIHsKICAgICAgICAgICAgICAgICAgICBhbnNbdl1bbm1dID0gdyArIHUuZGlzICsgYW5zW3ZdW21hc2tdOwogICAgICAgICAgICAgICAgICAgIHBxLmVtcGxhY2Uodiwgbm0sIGFuc1t2XVtubV0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybjsKfQoKdm9pZCBzb2x2ZUsoKSB7CiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG07IGkrKykgewogICAgICAgIGFkZF9lZGdlKGVbaV0udSwgZVtpXS52LCBlW2ldLncpOwogICAgICAgIGFkZF9lZGdlKGVbaV0udiwgZVtpXS51LCBlW2ldLncpOwogICAgfQoKICAgIERpaigpOwogICAgZm9yKGludCBpID0gazsgaSA8PSBuOyBpKyspIGNvdXQgPDwgYW5zW2ldW0ZCSVQoayldIDw8ICdcbic7CgogICAgcmV0dXJuOwp9Cgp2b2lkIHNvbHZlKCkgewogICAgY2luID4+IG4gPj4gbSA+PiBrOwogICAgZm9yKGludCBpID0gMTsgaSA8PSBtOyBpKyspIGNpbiA+PiBlW2ldLnUgPj4gZVtpXS52ID4+IGVbaV0udzsKCiAgICBpZihrIDw9IDEwKSByZXR1cm4gc29sdmVLKCksIHZvaWQoKTsKCiAgICBzb3J0KGUgKyAxLCBlICsgbSArIDEpOwogICAgZHN1ID0gRFNVKG4pOwoKICAgIG1lbXNldChkaXMsIDYzLCBzaXplb2YgZGlzKTsKCiAgICBpbnQgRiA9IG4gLSBrICsgMTsKICAgIGZvcihpbnQgbWFzayA9IDE7IG1hc2sgPCBNQVNLKEYpOyBtYXNrKyspIHsKICAgICAgICBsbCBjdXIgPSAwLCBtc3QgPSAwOwogICAgICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKSBpZihvayhlW2ldLnUsIG1hc2spICYmIG9rKGVbaV0udiwgbWFzaykpIHsKICAgICAgICAgICAgaWYoZHN1LmpvaW4oZVtpXS51LCBlW2ldLnYpKSB7CiAgICAgICAgICAgICAgICBjdXIgKz0gZVtpXS53OwogICAgICAgICAgICAgICAgbXN0Kys7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmKG1zdCA9PSBiaXRfY291bnQobWFzaykgKyBrIC0gMikgZGlzW21hc2tdID0gY3VyOwogICAgICAgIGZpbGwoYWxsKGRzdS5sYWIpLCAtMSk7CiAgICB9CgogICAgZm9yKGludCBpID0gazsgaSA8PSBuOyBpKyspIHsKICAgICAgICBsbCByZXMgPSAxZTE4OwogICAgICAgIGludCB0bXAgPSBNQVNLKGkgLSBrKTsKICAgICAgICBmb3IoaW50IG1hc2sgPSB0bXA7IG1hc2sgPCBNQVNLKEYpOyBtYXNrID0gKG1hc2sgKyAxKSB8IHRtcCkgewogICAgICAgICAgICByZXMgPSBtaW4ocmVzLCBkaXNbbWFza10pOwogICAgICAgIH0KCiAgICAgICAgY291dCA8PCByZXMgPDwgJ1xuJzsKICAgIH0KCiAgICByZXR1cm47Cn0KCmludDMyX3QgbWFpbigpIHsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoMCksIGNvdXQudGllKDApOwogICAgI2RlZmluZSB0YXNrICJ0ZXQiCiAgICBpZihmb3Blbih0YXNrIi5pbnAiLCAiciIpKSB7CiAgICAgICAgZnJlb3Blbih0YXNrIi5pbnAiLCAiciIsIHN0ZGluKTsKICAgICAgICBmcmVvcGVuKHRhc2siLm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KCiAgICBpbnQgdGVzdGNhc2UgPSBtdWx0aSA9PSAyID8gMWU5IDogMTsgaWYobXVsdGkgPT0gMSkgY2luID4+IHRlc3RjYXNlOwogICAgd2hpbGUodGVzdGNhc2UtLSkgc29sdmUoKTsKICAgIHJldHVybiAwOwp9Cg==