#include <bits/stdc++.h>
using namespace std;
int a[100000];
double p[100000], X = 0;
struct line {
  long double m, b;
};
bool comp(line a, line b) {
  if (a.m == b.m)
    return a.b < b.b;
  else
    return a.m < b.m;
}
int bad(line a, line b, line c) {
  return (a.b - b.b) * (c.m - b.m) >= (b.b - c.b) * (b.m - a.m);
}
vector<line> lines, hull;
long double apply(line l, long double p, long long int t) {
  return (1 - pow(1 - l.m, t)) / l.m * (X - l.b) + pow(1 - l.m, t) * p;
}
int main() {
  int i;
  int n, b;
  long long int t;
  scanf("%d %I64d", &n, &t);
  for (i = 0; i < n; i++)
    scanf("%d %d %lf", &a[i], &b, &p[i]), X = max(X, p[i] * b);
  for (i = 0; i < n; i++) lines.push_back((line){p[i], p[i] * a[i]});
  sort(lines.begin(), lines.end(), comp);
  for (i = 0; i < n; i++) {
    while (!hull.empty() && (hull.back().m == lines[i].m)) hull.pop_back();
    while ((hull.size() >= 2) &&
           bad(hull[hull.size() - 2], hull.back(), lines[i]))
      hull.pop_back();
    hull.push_back(lines[i]);
  }
  long long int c = 0;
  long double p = 0;
  i = 0;
  while (c < t) {
    long long int l = c, r = t;
    while (l < r) {
      long long int m = (l + r) / 2;
      long double pp = apply(hull[i], p, m - c);
      if (i == hull.size() - 1)
        l = m + 1;
      else if (hull[i].m * pp + hull[i].b < hull[i + 1].m * pp + hull[i + 1].b)
        r = m;
      else
        l = m + 1;
    }
    p = apply(hull[i], p, l - c), c = l, i++;
  }
  printf("%.13lf\n", (double)(t * X - p));
  return 0;
}
