#include<iostream>
#include<string>
#include<cstdio>
#include<vector>
#include<cmath>
#include<algorithm>
#include<functional>
#include<iomanip>
#include<queue>
#include<ciso646>
#include<random>
#include<map>
#include<set>
#include<bitset>
#include<stack>
#include<unordered_map>
#include<utility>
#include<cassert>
using namespace std;

typedef long long ll;

typedef unsigned long long ul;
typedef unsigned int ui;
const ll mod = 1000000007;
const ll INF = mod * mod;
typedef pair<int, int> P;
#define stop char nyaa;cin>>nyaa;
#define rep(i,n) for(int i=0;i<n;i++)
#define per(i,n) for(int i=n-1;i>=0;i--)
#define Rep(i,sta,n) for(int i=sta;i<n;i++)
#define rep1(i,n) for(int i=1;i<=n;i++)
#define per1(i,n) for(int i=n;i>=1;i--)
#define Rep1(i,sta,n) for(int i=sta;i<=n;i++)
typedef pair<ll, ll> LP;
typedef vector<int> vec;
typedef vector<string> svec;
typedef long double ld;
typedef pair<ld, ld> LDP;
const ld eps = 1e-8;

ld p[2002][2002];
ld rp[2002][2003];
void init() {
	p[0][0] = 1;
	rep(i, 2001) {
		rep(j, i + 1) {
			p[i + 1][j] += p[i][j] * (2 / 3.0);
			p[i + 1][j + 1] += p[i][j] * (1 / 3.0);
		}
	}
	rep(i, 2001) {
		rep(j, 2001) {
			rp[i][j + 1] = rp[i][j] + p[i][j];
		}
	}
}
vector<int> coef = { 5,3,2 };

int val[2000][3];
ld e[3][2001];

void solve() {
	int n, m; cin >> n >> m;
	rep(i, n) {
		rep(j, 3) {
			cin >> val[i][j];
		}
	}
	rep(id, 3) {
		rep(i,m+1 ) {
			int s = val[0][id] * i;
			//全部最下位
			ld pro = 1;
			rep1(j, n - 1) {
				int d = (s + val[j][id] - 1) / val[j][id];
				if (d > m)d = m+1;
				pro = pro * (1-rp[m][d]);
			}
			//1位,2位,3位
			vector<ld> dp(3, 0); dp[0] = 1;
			rep1(j, n - 1) {
				int d = (s + val[j][id] - 1) / val[j][id];
				if (d > m)d = m + 1;
				ld pp = rp[m][d];
				dp[2] = dp[2] * pp + dp[1] * (1 - pp);
				dp[1] = dp[1] * pp + dp[0] * (1 - pp);
				dp[0] = dp[0] * pp;
			}
			ld sum = 0;
			rep(j, 3)sum += dp[j];
			e[id][i] = pro * -1 + sum * coef[id];
		}
	}
	vector<ld> mdp(m + 1, -mod);
	rep(i, m + 1) {
		rep(j, m + 1) {
			if (i + j > m)continue;
			mdp[i + j] = max(mdp[i + j], e[0][i] + e[1][j]);
		}
	}
	ld ans = -mod;
	rep(i, m + 1) {
		ans = max(ans, mdp[i] + e[2][m - i]);
	}
	cout << ans << endl;
}

signed main() {
	ios::sync_with_stdio(false);
	cin.tie(0);

	cout << fixed << setprecision(10);
	init();
	solve();
	//stop
		return 0;
}
