#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define rep(x, s, t) for(llint (x) = (s); (x) <= (t); (x)++) #define reps(x, s) for(llint (x) = 0; (x) < (llint)(s).size(); (x)++) #define chmin(x, y) (x) = min((x), (y)) #define chmax(x, y) (x) = max((x), (y)) #define ceildiv(x, y) (((x)+(y)-1) / (y)) #define all(x) (x).begin(),(x).end() #define outl(x) cout << x << endl #define SP << " " << #define inf 1e18 #define eps 1e-9 using namespace std; typedef long long llint; typedef long long ll; typedef pair P; bool exceed(ll x, ll y, ll m){return x >= m / y + 1;} struct vec2d{ double x, y; vec2d(){} vec2d(double x, double y){ this->x = x, this->y = y; } double add(double a, double b){ if(fabs(a+b) < eps * (fabs(a) + fabs(b))) return 0.0; return a+b; } vec2d operator+(vec2d ope){ return vec2d(add(x, ope.x), add(y, ope.y)); } vec2d operator-(vec2d ope){ return vec2d(add(x, -ope.x), add(y, -ope.y)); } vec2d operator*(double t){ return vec2d(x*t, y*t); } vec2d operator/(double t){ return vec2d(x/t, y/t); } double dot(vec2d ope){ return add(x*ope.x, y*ope.y); } double cross(vec2d ope){ return add(x*ope.y, -y*ope.x); } double norm(){ double d2 = dot(*this); if(d2 > 0) return sqrt(d2); return 0.0; } }; double distPP(vec2d p, vec2d q){ return (p-q).norm(); } ll n; double w; vec2d p[15]; double r[15], v[15], a[15]; double dp[1<<13][13]; int main(void) { //ios::sync_with_stdio(0); //cin.tie(0); cin >> n >> w; rep(i, 0, n-1) cin >> p[i].x >> p[i].y >> r[i] >> v[i] >> a[i]; n++; ll N = 1< inf/2) continue; rep(k, 0, n-1){ if(i & (1<