#include<bits/stdc++.h>
using namespace std;
const int N=1e5+100;
const double eps=0.00000001;
int n,m,f,fa[N];
double c[N],t[N];
int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
struct edge{int x,y;double w;}e[N];
bool cmp(edge A,edge B){return A.w>B.w;}
bool check(double x){
for(int i=1;i<=m;i++) e[i].w=-c[i]-t[i]*x;
for(int i=1;i<=n;i++) fa[i]=i;
sort(e+1,e+1+m,cmp);
int cnt=0;double all=f*1.0;
for(int i=1;i<=m;i++){
int x=e[i].x,y=e[i].y;
int fx=find(x),fy=find(y);
if(fx==fy) continue;
fa[min(fx,fy)]=max(fx,fy);
all+=e[i].w,cnt++;
if(cnt==n-1) break;
}
double p=(double)(f);
return all>=0;
}
int main(){
cin>>n>>m>>f;
for(int i=1;i<=m;i++){
int a,b;
cin>>a>>b>>c[i]>>t[i];
e[i].x=a,e[i].y=b;
}
double l=0,r=1e9,ans=0;
while(r-l>=eps){
double mid=(l+r)/2;
if(check(mid)) ans=mid,l=mid+eps;
else r=mid-eps;
}
printf("%.4lf",ans);
}