import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.PriorityQueue;
import java.util.Scanner;
public class Cockchaf {
private static class Vrch implements Comparable<Vrch>{
public double d;
public Vrchol v;
public Vrchol p;
public Vrch(double d, Vrchol v, Vrchol p) {
this.d = d;
this.v = v;
this.p = p;
}
@Override
public int compareTo(Vrch o) {
return (int)Math.
signum(o.
d-d
); }
}
public static double a2(double a){
return a*a;
}
private static class Vrchol{
public int x,y,z,p;
public List<Vrchol> sused;
public Vrchol(int x, int y, int z) {
this.x = x;
this.y = y;
this.z = z;
sused = new LinkedList<Vrchol>();
}
public double vzdialenost(Vrchol v){
return Math.
sqrt(a2
(v.
x-x
)+a2
(v.
y-y
)+a2
(v.
z-z
)); }
public boolean equals(Vrchol v) {
if(v.x==x && v.y==y && v.z==z){
return true;
} else {
return false;
}
}
@Override
return "[" + x + ","+y+","+z+"] ";
}
}
private static double uhol(Vrchol v1, Vrchol v2, Vrchol v3){
int dx1 = v2.x-v1.x;
int dy1 = v2.y-v1.y;
int dz1 = v2.z-v1.z;
int dx2 = v3.x-v2.x;
int dy2 = v3.y-v2.y;
int dz2 = v3.z-v2.z;
return (Math.
acos(Math.
abs(dx1
*dx2
+ dy1
*dy2
+ dz1
*dz2
) / (Math.
sqrt(a2
(dx1
)+a2
(dy1
)+a2
(dz1
)) * Math.
sqrt(a2
(dx2
)+a2
(dy2
)+a2
(dz2
))))/Math.
PI*180); }
public static void main
(String[] args
) { while(true){
try {
line = br.readLine();
Scanner sc = new Scanner(line);
int N = sc.nextInt();
int S = sc.nextInt();
int T = sc.nextInt();
List<Vrchol> zoznam = new ArrayList<Vrchol>();
for(int i=0; i<= N; ++i){
line = br.readLine();
sc = new Scanner(line);
int x1 = sc.nextInt();
int y1 = sc.nextInt();
int z1 = sc.nextInt();
Vrchol nv1 = new Vrchol(x1, y1, z1);
int x2 = sc.nextInt();
int y2 = sc.nextInt();
int z2 = sc.nextInt();
Vrchol nv2 = new Vrchol(x2, y2, z2);
boolean jv1 = false, jv2 = false;
for(Vrchol v: zoznam){
if(v.equals(nv1)){
nv1 = v;
jv1 = true;
}
if(v.equals(nv2)){
nv2 = v;
jv2 = true;
}
if(jv1 && jv2){
break;
}
}
if(!jv1) zoznam.add(nv1);
if(!jv2) zoznam.add(nv2);
if(i!=0){
nv1.sused.add(nv2);
nv2.sused.add(nv1);
}
}
boolean[] navstivene = new boolean[zoznam.size()];
for(int i=0; i<zoznam.size(); ++i){
zoznam.get(i).p=i;
navstivene[i]=false;
}
Vrch zac = new Vrch(0.0, zoznam.get(0), null);
PriorityQueue<Vrch> fronta = new PriorityQueue<Vrch>();
fronta.add(zac);
while(!fronta.isEmpty()){
Vrch v = fronta.poll();
//System.out.println(v.v + " " + v.d);
if(navstivene[v.v.p]) continue;
if(v.v.p==1) {
break;
}
navstivene[v.v.p] = true;
for(Vrchol sus: v.v.sused){
double vz = v.d + v.v.vzdialenost(sus)/S;
if(v.p!=null) vz += uhol(v.p, v.v, sus)/T;
Vrch s = new Vrch(vz, sus, v.v);
fronta.add(s);
}
}
//System.out.println(zoznam.size());
e.printStackTrace();
return;
}
}
}
}