#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int t,n,m,fa[200005];
long long mx,mn,tmp,k;
struct E{
    int x,y;
    long long w;
} e[200005];
int find(int x){
    return fa[x]==x?x:fa[x]=find(fa[x]);
}
inline bool cmp(const E &a,const E &b){
    return a.w<b.w;
}
int main(){
    scanf("%d",&t);
    while(t--){
        scanf("%d%d%lld",&n,&m,&k);
        mx=0; mn=2e9;
        for(int i=0;i<m;i++){                   //预处理
            scanf("%d%d%lld",&e[i].x,&e[i].y,&tmp);
            if(tmp>k) mn=min(mn,tmp),tmp-=k;
            else mx=max(mx,tmp),tmp=0;
            e[i].w=tmp;
        }
        ///////////////////////////最小生成树
        sort(e,e+m,cmp);
        int s=n,ct=0;
        long long ans=0;
        for(int i=1;i<=n;i++) fa[i]=i;
        while(--s){
            while(find(e[ct].x)==find(e[ct].y)) ct++;
            ans+=e[ct].w;
            fa[fa[e[ct].x]]=fa[e[ct].y];
        }
        ////////////////////////////////////////
        if(ans==0) ans=min(k-mx,mn-k);
        printf("%lld\n",ans);
    }
    return 0;
}