// HDU 3691#include<bits/stdc++.h>usingnamespace std;typedeflonglong LL;constint MAXN =310;
LL mat[MAXN][MAXN];
LL weight[MAXN];bool del[MAXN], vis[MAXN];int n, m, st;voidinit(){memset(mat,0,sizeof(mat));memset(del,0,sizeof(del));}
LL StoerWagner(int&s,int&t,int cnt){memset(weight,0,sizeof(weight));memset(vis,0,sizeof(vis));for(int i =1; i <= n;++i)if(!del[i]){
t = i;break;}while(--cnt){
vis[s = t]=true;for(int i =1; i <= n;++i)if(!del[i]&&!vis[i]){
weight[i]+= mat[s][i];}
t =0;for(int i =1; i <= n;++i)if(!del[i]&&!vis[i]){if(weight[i]>= weight[t]) t = i;}}return weight[t];}voidmerge(int s,int t){for(int i =1; i <= n;++i){
mat[s][i]+= mat[t][i];
mat[i][s]+= mat[i][t];}
del[t]=true;}
LL solve(){
LL ret =-1;int s, t;for(int i = n; i >1;--i){if(ret ==-1)
ret =StoerWagner(s, t, i);else
ret =min(ret,StoerWagner(s, t, i));merge(s, t);}return ret;}intmain(){while(scanf("%d%d%d",&n,&m,&st)!=EOF){if(n ==0&& m ==0&& st ==0)break;init();while(m--){int x, y, z;scanf("%d%d%d",&x,&y,&z);
mat[x][y]+= z;
mat[y][x]+= z;// 点的标号从1 ~ n}
cout <<solve()<< endl;}}
2.2 O(nmlog(m))
// HDU - 6081#include<bits/stdc++.h>usingnamespace std;typedeflonglong ll;constint MAXV =3010;constint MAXE =200010;constint INF =0x3f3f3f3f;structedge{int u, v, w, next;} e[MAXE];int head[MAXV], edge_num;voidinsert_edge(int u,int v,int w){
e[edge_num].u = u;
e[edge_num].v = v;
e[edge_num].w = w;
e[edge_num].next = head[u];
head[u]= edge_num++;}int fa[MAXV], link[MAXV];intfind(int x){return x == fa[x]? x : fa[x]=find(fa[x]);}int val[MAXV];bool vis[MAXV];int N, M;voidinit(){memset(head,-1,sizeof(head));memset(link,-1,sizeof(link));for(int i =1; i <= N; i++){
fa[i]= i;}
edge_num =0;}voidmerge(int u,int v){int p = u;while(~link[p]) p = link[p];
link[p]= v;
fa[v]= u;}intMCP(int cnt,int&s,int&t){memset(val,0,sizeof(val));memset(vis,0,sizeof(vis));
priority_queue<pair<int,int>> que;
t =1;while(--cnt){
s = t;
vis[s]=true;for(int u = s;~u; u = link[u]){for(int p = head[u];~p; p = e[p].next){int v =find(e[p].v);if(!vis[v]) que.push(make_pair(val[v]+= e[p].w, v));}}
t =0;while(!t){if(que.empty())return0;
pair<int,int> tp = que.top();
que.pop();if(val[tp.second]== tp.first) t = tp.second;}}return val[t];}intStoerWagner(){int res = INF;for(int i = N, s, t; i >1; i--){
res =min(res,MCP(i, s, t));if(res ==0)break;merge(s, t);}return res;}intmain(){int a;while(~scanf("%d%d",&N,&M)){init();int u, v, w;for(int i =0; i < M; i++){scanf("%d%d%d",&u,&v,&w);insert_edge(u, v, w);insert_edge(v, u, w);// 点的标号为1 ~ n}printf("%d\n",StoerWagner());}return0;}