#include<bits/stdc++.h>
#define Nico(x) ((0 < (x) + EPS) && ((x) < 1 + EPS))
using namespace std;

typedef pair<int, int> PII;

const int MAXN = 55;
const int MAXM = 5005;
const double INF = 1E200;
const double EPS = 1E-8;

int A, B, C, n, K, X, Y, Z;
int x[MAXN], y[MAXN], z[MAXN];
double E, ans;

set<PII> f[MAXN][MAXM];
set<PII> F[MAXM];

void Modify(set<PII> &s, PII p){
	set<PII>::iterator it = s.lower_bound(p);
	while (it != s.end() && it->second >= p.second)
		s.erase(it++);
	if (it != s.begin() && (--it)->second <= p.second)
		return;
	s.insert(p);
}

void check(double _X, double _Y, double _Z){
	double Alpha = 1 - (_X - X) / x[0];
	double Beta = 1 - (_Y - Y) / y[0];
	double Gamma = 1 - (_Z - Z) / z[0];
	if (Nico(Alpha) && Nico(Beta) && Nico(Gamma))
		ans = min(ans, Alpha * A + Beta * B + Gamma * C);

}

int main(){
	while(scanf("%d%d%d%d%d", &n, &K, &A, &B, &C) != EOF){	
	for (int i = 0; i < n; i++)
		scanf("%d%d%d", &x[i], &y[i], &z[i]);
	for(int j = 0; j < MAXN; j++)
		for (int k = 0; k < MAXM; k++)
			f[j][k].clear();
	x[n] = x[0];
	y[n] = y[0];
	z[n] = z[0];
	f[0][0].insert(PII(0, 0));
	for (int i = 1; i <= n; i++){
		if (i == n){
			for (int j = 0; j < MAXM; j++)
				F[j] = f[K - 1][j];
		}
		for (int j = i; j >= 0; j--){
			for (int k = MAXM - 1; k >= 0; k--){
				for (auto l = f[j][k].begin(); l != f[j][k].end(); l++){
					Modify(f[j + 1][k + x[i]], PII(l->first + y[i], l->second + z[i]));
				}
			}
		}
	}

	E = ans =INF;
	for (int k = 0; k < MAXM; k++){
		for (auto l = f[K][k].begin(); l != f[K][k].end(); l++){
			E = min(E, (double)k * l->first * l->second);
		}
	}

	for (int k = 0; k < MAXM; k++){
		for (auto l = F[k].begin(); l != F[k].end(); l++){
			X = k;
			Y = l->first;
			Z = l->second;
			if ((double)X * Y * Z >= E)
				continue;
			for (int u = 0; u <= 1; u++)
				for (int v = 0; v <= 1; v++){
					if ((X + u * x[0]) && (Y + v * y[0]))
						check((double)X + u * x[0], (double)Y + v * y[0], E / (X + u * x[0]) / (Y + v * y[0]));
					if ((Y + u * y[0]) && (Z + v * z[0]))
						check(E / (Y + u * y[0]) / (Z + v * z[0]), (double)Y + u * y[0], (double)Z + v * z[0]);
					if ((X + u * x[0]) && (Z + v * z[0]))
						check((double)X + u * x[0], E / (X + u * x[0]) / (Z + v * z[0]), (double)Z + v * z[0]);
				}
		}
	}

	printf("%.6lf\n", ans);
	}
	return 0;
}
