
#include<bits/stdc++.h>
using namespace std;
int n;
bool vis[109];
double v,ans=DBL_MAX;
struct node{
int x,y;
vector<int>g;
}a[109];
void dfs(int step,double cnt){
if (step==n){
ans=min(ans,cnt);
return;
}
for (int i=0;i<a[step].g.size();i++)
if (vis[a[step].g[i]]==0){
vis[i]=1;
dfs(a[step].g[i],cnt+
sqrt((a[step].x-a[a[step].g[i]].x)*(a[step].x-a[a[step].g[i]].x)+
(a[step].y-a[a[step].g[i]].y)*(a[step].y-a[a[step].g[i]].y))/v);
if (a[step].x==a[a[step].g[i]].x&&
a[step].y>a[a[step].g[i]].y)
dfs(a[step].g[i],cnt+
sqrt((a[step].y-a[a[step].g[i]].y)/5));
vis[i]=0;
}
}
int main(){
cin>>n>>v;
for (int i=1;i<=n;i++){
int z;
cin>>a[i].x>>a[i].y>>z;
a[i].g.push_back(z);
a[z].g.push_back(i);
}
dfs(1,0);
cout<<ans;
return 0;
}