#include <bits/stdc++.h>
using namespace std;
int n, a, b, ed;
double p, M;
long long T;
vector<pair<double, double> > v;
pair<double, double> sta[100004];
double cros(pair<double, double> a, pair<double, double> b) {
  return (b.second - a.second) / (a.first - b.first);
}
double r[100004], ret;
double mat[35][3][3], cur[3];
int main() {
  scanf("%d%I64d", &n, &T);
  for (int i = 0; i < n; i++) {
    scanf("%d%d%lf", &a, &b, &p);
    M = max(M, p * b);
    v.push_back(make_pair(p, -p * a));
  }
  sort(v.begin(), v.end());
  for (int i = 0; i < n; i++) {
    if (i > 0 && v[i].first == v[i - 1].first) continue;
    v[i].second *= -1;
    while (ed > 1 && cros(sta[ed - 1], sta[ed]) > cros(sta[ed], v[i])) ed--;
    sta[++ed] = v[i];
  }
  for (int i = 1; i < ed; i++) r[i] = cros(sta[i], sta[i + 1]);
  r[ed] = 1e18 + 114;
  double lst = 0;
  long long t1 = 0;
  for (int i = 1; i <= ed; i++) {
    if (t1 == T || (t1 * M - lst) >= r[i]) continue;
    mat[0][0][0] = 1 - sta[i].first, mat[0][0][1] = 0, mat[0][0][2] = 0;
    mat[0][1][0] = sta[i].first * M, mat[0][1][1] = 1, mat[0][1][2] = 0;
    mat[0][2][0] = sta[i].second, mat[0][2][1] = 1, mat[0][2][2] = 1;
    for (int j = 1; j <= 33; j++) {
      for (int i1 = 0; i1 < 3; i1++)
        for (int j1 = 0; j1 < 3; j1++) {
          mat[j][i1][j1] = 0;
          for (int k = 0; k < 3; k++)
            mat[j][i1][j1] += mat[j - 1][i1][k] * mat[j - 1][k][j1];
        }
    }
    for (int j = 33; j >= 0; j--) {
      if (t1 + (1ll << j) >= T) continue;
      cur[0] = lst, cur[1] = t1, cur[2] = 1;
      ret = 0;
      for (int k = 0; k < 3; k++) ret += cur[k] * mat[j][k][0];
      if (M * (t1 + (1ll << j)) - ret < r[i]) lst = ret, t1 += (1ll << j);
    }
    cur[0] = lst, cur[1] = t1, cur[2] = 1;
    lst = 0;
    for (int j = 0; j < 3; j++) lst += cur[j] * mat[0][j][0];
    t1++;
  }
  printf("%.6lf", lst);
}
