import math n, w = map(lambda s_: int(s_), input().split()) sushi = [tuple(map(lambda s_: int(s_), input().split())) for _ in range(n)] sushi.append((0, 0, 0, 0, 0)) def pos_when(i, t): x, y, r, v, a = sushi[i] theta = (v * t + a) * math.pi / 180 return x + r * math.cos(theta), y + r * math.sin(theta) def next_time(v, t0, nv): p = pos_when(v, t0) def pred(dt): np = pos_when(nv, t0 + dt) d = (p[0] - np[0]) ** 2 + (p[1] - np[1]) ** 2 return d <= (w * dt)**2 # if pred(0): # return t0 ng = 0 ok = 1e-5 c = 0 while not pred(ok): ng, ok = ok, ok * 2 c += 1 for _ in range(30 + c): mi = (ng + ok) / 2 if pred(mi): ok = mi else: ng = mi return t0 + ok oo = 1e1000 n2 = 1 << n + 1 dp = [[oo] * n2 for _ in range(n + 1)] dp[n][1 << n] = 0 for bit in range(n2): done = [i for i in range(n + 1) if bit >> i & 1] todo = [i for i in range(n + 1) if ~bit >> i & 1] for v in done: dpi = dp[v][bit] if dpi == oo: continue for nv in todo: ndpi = next_time(v, dpi, nv) nbit = bit | 1 << nv dp[nv][nbit] = min(dp[nv][nbit], ndpi) ans = min(dp[v][-1] for v in range(n)) print(f"{ans:.20f}")