#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 50;
const double eps = 1e-12;
int n;
long long T;
double S;
struct pnt {
  double x, y;
  pnt(double _x = 0, double _y = 0) { x = _x, y = _y; }
  bool operator<(const pnt &z) const {
    return x < z.x || (x == z.x && y < z.y);
  }
  pnt operator-(const pnt &z) { return pnt(x - z.x, y - z.y); }
  double operator*(const pnt &z) { return x * z.y - y * z.x; }
} p[N], stk[N];
double F(double f, double t, pnt p) {
  return f * (1 - p.x) + p.x * t * S + p.y;
}
struct mat {
  double a[3][3];
  mat() { memset(a, 0, sizeof(a)); }
  void norm() { a[0][0] = a[1][1] = a[2][2] = 1; }
  void init(pnt p) {
    a[0][0] = 1 - p.x;
    a[1][0] = S * p.x;
    a[2][0] = p.y;
    a[1][1] = a[2][1] = a[2][2] = 1;
  }
  mat operator*(const mat &x) {
    mat y;
    for (int i = 0; i < 3; i++)
      for (int j = 0; j < 3; j++)
        for (int k = 0; k < 3; k++) y.a[i][j] += a[i][k] * x.a[k][j];
    return y;
  }
};
int main() {
  cin >> n >> T;
  for (int i = 1; i <= n; i++) {
    double a, b, c;
    scanf("%lf%lf%lf", &a, &b, &c);
    p[i] = pnt(c, c * a);
    S = max(S, b * c);
  }
  sort(p + 1, p + n + 1);
  int top = 0;
  for (int i = 1; i <= n; i++) {
    while (top > 1 && (stk[top] - stk[top - 1]) * (p[i] - stk[top - 1]) >= 0)
      --top;
    if (top && p[i].y >= stk[top].y) --top;
    stk[++top] = p[i];
  }
  n = top;
  for (int i = 1; i <= n; i++) p[i] = stk[i];
  long long t = 0;
  double f = 0;
  for (int i = 1; i <= n; i++) {
    if (i < n && F(f, t, p[i]) < F(f, t, p[i + 1])) continue;
    static mat mt[35];
    mt[0].init(p[i]);
    for (int j = 1; j < 34; j++) mt[j] = mt[j - 1] * mt[j - 1];
    mat cur;
    cur.norm();
    long long s = 0;
    for (int j = 33; ~j; j--) {
      mat nxt = cur * mt[j];
      if (t + s + (1ll << j) >= T) continue;
      double _f = f * nxt.a[0][0] + t * nxt.a[1][0] + nxt.a[2][0];
      if (i < n &&
          F(_f, t + s + (1ll << j), p[i]) < F(_f, t + s + (1ll << j), p[i + 1]))
        continue;
      cur = nxt, s += 1ll << j;
    }
    f = f * cur.a[0][0] + t * cur.a[1][0] + cur.a[2][0], t += s;
    f = F(f, t, p[i]), ++t;
    if (t >= T) break;
  }
  printf("%.10lf", f);
  return 0;
}
