#include <bits/stdc++.h>
using namespace std;
const bool debug = 0;
const int Nmax = 1e5 + 5, lg = 34;
int n, N, i, a[Nmax], b[Nmax];
long long T;
long double p[Nmax], M;
vector<vector<long double> > operator*(vector<vector<long double> > a,
                                       vector<vector<long double> > b) {
  vector<vector<long double> > c(3, vector<long double>(3, 0));
  int i, j, k;
  for (i = 0; i < 3; ++i)
    for (j = 0; j < 3; ++j)
      for (k = 0; k < 3; ++k) c[i][j] += a[i][k] * b[k][j];
  return c;
}
vector<vector<long double> > Z[lg + 2];
struct ec {
  long double a, b;
  long double operator()(long double x) { return a * x + b; }
  bool operator<(const ec &other) const {
    if (a == other.a) return b < other.b;
    return a < other.a;
  }
} A[Nmax];
long double intersect(ec X, ec Y) { return (X.b - Y.b) / (Y.a - X.a); }
bool wrong(ec A, ec B, ec C) {
  if (B.a == C.a) return 1;
  auto x = intersect(A, B);
  return A(x) < C(x);
}
void read() {
  int i;
  M = 0;
  cin >> n >> T;
  for (i = 1; i <= n; ++i) cin >> a[i] >> b[i] >> p[i];
  for (i = 1; i <= n; ++i) M = max(M, p[i] * b[i]);
}
void prepare_batch() {
  int i;
  N = 0;
  for (i = 1; i <= n; ++i) A[i] = {p[i], p[i] * a[i]};
  sort(A + 1, A + n + 1);
  for (i = 1; i <= n; ++i) {
    while (N >= 2 && wrong(A[N - 1], A[N], A[i])) --N;
    A[++N] = A[i];
  }
}
void print(vector<vector<long double> > &S) {
  int i, j;
  cerr << "Another Matrix: \n";
  for (i = 0; i < 3; ++i) {
    for (j = 0; j < 3; ++j) cerr << S[i][j] << ' ';
    cerr << '\n';
  }
}
void solve() {
  int i, j;
  long long t = 0;
  long double lim;
  vector<vector<long double> > S(3, vector<long double>(3, 0));
  S[0] = {0, 0, 1};
  if (debug)
    for (i = 1; i < N; ++i) cerr << intersect(A[i], A[i + 1]) << ' ';
  for (i = 1; i <= N; ++i) {
    if (i < N)
      lim = intersect(A[i], A[i + 1]);
    else
      lim = 1e20;
    if (t * M - S[0][0] > lim) continue;
    if (t == T) break;
    Z[0] = {{1 - A[i].a, 0, 0}, {A[i].a * M, 1, 0}, {A[i].b, 1, 1}};
    for (j = 1; j <= lg; ++j) Z[j] = Z[j - 1] * Z[j - 1];
    for (j = lg; j >= 0; --j)
      if (t + (1LL << j) <= T &&
          (t + (1LL << j)) * M - (S * Z[j])[0][0] <= lim) {
        t += (1LL << j);
        S = S * Z[j];
        if (debug) print(S);
      }
    if (t < T && S[0][0] <= lim) S = S * Z[0], ++t;
    if (debug) print(S);
  }
  assert(t == T);
  cout << setprecision(12) << fixed;
  cout << S[0][0] << '\n';
}
int main() {
  cin.sync_with_stdio(false);
  read();
  prepare_batch();
  solve();
  return 0;
}
