#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10,M=1e4+10;
int p[N];
int n,m,k;
int ans;
int find(int x)
{
if(p[x]!=x) p[x]=find(p[x]);
return p[x];
}
struct Edge
{
int a,b,c;
bool operator <(const Edge &other)const{
return c<other.c;
}
}edge[M];
int main()
{
cin>>n>>m>>k;
for(int i=0;i<m;i++)
{
int a,b,c;
cin>>a>>b>>c;
edge[i]={a,b,c};
}
sort(edge,edge+m);//先把所有边按边的权重进行排序。
//初始化并查集
for(int i=1;i<=n;i++)
{
p[i]=i;
}
int cnt=0;
for(int i=0;i<m;i++)
{
int a=edge[i].a; int b=edge[i].b; int w=edge[i].c;
a=find(a); b=find(b);
if(a!=b)//如果两个节点不在一个集合就加入同一个集合
{
ans+=w;
p[a]=b;
cnt++;
}
}
if(cnt>=n-k)
{
cout<<ans<<endl;
}
else{
cout<<"No Answer"<<endl;
}
return 0;
}