#include using namespace std; using ll=long long; #define int ll #define rng(i,a,b) for(int i=int(a);i=int(a);i--) #define per(i,b) gnr(i,0,b) #define pb push_back #define eb emplace_back #define a first #define b second #define bg begin() #define ed end() #define all(x) x.bg,x.ed #define si(x) int(x.size()) #ifdef LOCAL #define dmp(x) cerr<<__LINE__<<" "<<#x<<" "< bool chmax(t&a,u b){if(a bool chmin(t&a,u b){if(b using vc=vector; template using vvc=vc>; using pi=pair; using vi=vc; template ostream& operator<<(ostream& os,const pair& p){ return os<<"{"< ostream& operator<<(ostream& os,const vc& v){ os<<"{"; for(auto e:v)os< void dmpr(ostream&os,const T&t,const Args&... args){ os< ostream& operator<<(ostream&os,const array&a){ return os<(all(a)); } template void print_tuple(ostream&,const T&){ } template void print_tuple(ostream&os,const T&t){ if(i)os<<","; os<(t); print_tuple(os,t); } template ostream& operator<<(ostream&os,const tuple&t){ os<<"{"; print_tuple<0,tuple,Args...>(os,t); return os<<"}"; } template void print(t x,int suc=1){ cout<>i; return i; } vi readvi(int n,int off=0){ vi v(n); rep(i,n)v[i]=read()+off; return v; } pi readpi(int off=0){ int a,b;cin>>a>>b; return pi(a+off,b+off); } template void print(const vector&v,int suc=1){ rep(i,v.size()) print(v[i],i==int(v.size())-1?suc:2); } string readString(){ string s; cin>>s; return s; } template T sq(const T& t){ return t*t; } //#define CAPITAL void yes(bool ex=true){ #ifdef CAPITAL cout<<"YES"<<"\n"; #else cout<<"Yes"<<"\n"; #endif if(ex)exit(0); #ifdef LOCAL cout.flush(); #endif } void no(bool ex=true){ #ifdef CAPITAL cout<<"NO"<<"\n"; #else cout<<"No"<<"\n"; #endif if(ex)exit(0); #ifdef LOCAL cout.flush(); #endif } void possible(bool ex=true){ #ifdef CAPITAL cout<<"POSSIBLE"<<"\n"; #else cout<<"Possible"<<"\n"; #endif if(ex)exit(0); #ifdef LOCAL cout.flush(); #endif } void impossible(bool ex=true){ #ifdef CAPITAL cout<<"IMPOSSIBLE"<<"\n"; #else cout<<"Impossible"<<"\n"; #endif if(ex)exit(0); #ifdef LOCAL cout.flush(); #endif } constexpr ll ten(int n){ return n==0?1:ten(n-1)*10; } const ll infLL=LLONG_MAX/3; #ifdef int const int inf=infLL; #else const int inf=INT_MAX/2-100; #endif int topbit(signed t){ return t==0?-1:31-__builtin_clz(t); } int topbit(ll t){ return t==0?-1:63-__builtin_clzll(t); } int botbit(signed a){ return a==0?32:__builtin_ctz(a); } int botbit(ll a){ return a==0?64:__builtin_ctzll(a); } int popcount(signed t){ return __builtin_popcount(t); } int popcount(ll t){ return __builtin_popcountll(t); } bool ispow2(int i){ return i&&(i&-i)==i; } ll mask(int i){ return (ll(1)< void mkuni(vc&v){ sort(all(v)); v.erase(unique(all(v)),v.ed); } ll rand_int(ll l, ll r) { //[l, r] #ifdef LOCAL static mt19937_64 gen; #else static mt19937_64 gen(chrono::steady_clock::now().time_since_epoch().count()); #endif return uniform_int_distribution(l, r)(gen); } template void myshuffle(vc&a){ rep(i,si(a))swap(a[i],a[rand_int(0,i)]); } template int lwb(const vc&v,const t&a){ return lower_bound(all(v),a)-v.bg; } vvc readGraph(int n,int m){ vvc g(n); rep(i,m){ int a,b; cin>>a>>b; //sc.read(a,b); a--;b--; g[a].pb(b); g[b].pb(a); } return g; } vvc readTree(int n){ return readGraph(n,n-1); } using int128=__int128_t; using uint128=unsigned __int128_t; //-が来た場合はまだわからん istream& operator>>(istream&is,int128&res){ res=0; string s;is>>s; int head=0; int128 w=1; if(s[0]=='_'){ w=-1; head++; } while(head>64)); } int128 gcd(int128 a,int128 b){ if(a<0)a=-a; if(b<0)b=-b; if(a==0)return b; if(b==0)return a; int128 s=botbit(a|b); a>>=botbit(a); do{ b>>=botbit(b); if(a>b)swap(a,b); b-=a; }while(b); return a< struct maxflow{ struct E{ int to,nx; d cap; }; int n; vc es; vi head,q; vc itr,lv; int curt; maxflow(int nn):n(nn),head(n,-1),q(n),itr(n),lv(n),curt(0){} int ae(int s,int t,d c,d c2=0){ int pres=head[s]; int pret=head[t]; head[s]=si(es); es.pb({t,pres,c}); head[t]=si(es); es.pb({s,pret,c2}); return head[s]; } void bfs(int s,int t=-1){ lv[s]=pi(0,curt); int l=0,r=0; q[r++]=s; while(l0&&lv[e.to].b0&&lv[e.to].a==lv[v].a-1&&lv[e.to].b==curt){ d a=dfs(e.to,t,min(f,rev.cap)); if(a>0){ rev.cap-=a; e.cap+=a; res+=a; f-=a; if(f<=0)break; } } itr[v].a=e.nx; } return res; } d calc(int s,int t,d mx=inf){ d f=0; while(f getcut(){ vc res(n); rep(i,n)res[i]=lv[i].b>a>>b>>c>>d; a--;b--; } bool operator<(const Edge&e){ return c>n>>m>>k; vc es(m); rep(i,m)es[i].initread(); sort(all(es)); unionfind uf(n); int ans=k*(n-1)*es[0].c; vc alive; rng(used,1,m+1){ alive.pb(es[used-1]); int s=si(alive); maxflow mf(1+s+n+1); vi idx; int tot=0; rep(i,s){ int v=alive[i].d+(i==s-1?k:0); idx.pb(mf.ae(0,1+i,v)); tot+=v; mf.ae(1+i,1+s+uf.find(alive[i].a),inf); mf.ae(1+i,1+s+uf.find(alive[i].b),inf); } rep(i,n)mf.ae(1+s+i,1+s+n,k); tot-=mf.calc(0,1+s+n); dmp2(used,tot); if(tot>0){ auto c=mf.getcut(); dmp(c); rep(i,s){ bool u=!c[1+i]; if(i==s-1)assert(u); if(u)uf.unite(alive[i].a,alive[i].b); } } int w=k*(uf.c-1); vc tmp; rep(i,s){ if(!uf.same(alive[i].a,alive[i].b)){ tmp.pb(alive[i]); w-=alive[i].d; } } swap(tmp,alive); if(used==m){ if(w>0){ print(-1); return; } }else{ ans+=w*(es[used].c-es[used-1].c); } } print(ans); } signed main(){ cin.tie(0); ios::sync_with_stdio(0); cout<>t;rep(_,t) slv(); }