#include <bits/stdc++.h>
using namespace std;
const int MAXN = 110000;
template <typename T1>
struct Matrix {
  int n, m;
  T1 a[3][3];
  Matrix() {}
  Matrix(int r, int c) : n(r), m(c) {
    for (int i = 0; i < 3; i++)
      for (int j = 0; j < 3; j++) a[i][j] = 0;
  }
  template <typename T2>
  Matrix(const Matrix<T2>& b) : n(b.n), m(b.m) {
    for (int i = 0; i < 3; i++)
      for (int j = 0; j < 3; j++) a[i][j] = b.a[i][j];
  }
  Matrix operator*(const Matrix& b) const {
    Matrix c(n, b.m);
    for (int i = 0; i < n; i++)
      for (int k = 0; k < m; k++)
        for (int j = 0; j < b.m; j++) c.a[i][j] += a[i][k] * b.a[k][j];
    return c;
  }
  Matrix qpow(long long k) const {
    Matrix s(n, m), t = *this;
    for (int i = 0; i < n; i++) s.a[i][i] = 1;
    while (k) {
      if (k & 1) s = s * t;
      t = t * t;
      k >>= 1;
    }
    return s;
  }
};
struct Quest {
  int a;
  long double p;
  bool operator<(const Quest& rhs) const { return p < rhs.p; }
} a[MAXN];
int q[MAXN];
Matrix<long double> w[MAXN];
inline long double gety(int i, int j) {
  return a[j].p * a[j].a - a[i].p * a[i].a;
}
inline long double getx(int i, int j) { return a[i].p - a[j].p; }
int main() {
  int n, m = 0;
  long long t;
  long double c = 0;
  scanf("%d%lld", &n, &t);
  for (int i = 1; i <= n; i++) {
    int b;
    double p;
    scanf("%d%d%lf", &a[i].a, &b, &p);
    a[i].p = p;
    c = max(c, a[i].p * b);
  }
  sort(a + 1, a + n + 1);
  for (int i = 1; i <= n; i++) {
    while (m >= 2 && gety(i, q[m]) * getx(q[m], q[m - 1]) <=
                         gety(q[m], q[m - 1]) * getx(i, q[m]))
      m--;
    q[++m] = i;
  }
  for (int i = 1; i <= m; i++) {
    w[i] = Matrix<long double>(3, 3);
    w[i].a[0][0] = 1 - a[q[i]].p;
    w[i].a[1][0] = a[q[i]].p * c;
    w[i].a[2][0] = a[q[i]].p * a[q[i]].a;
    w[i].a[1][1] = w[i].a[2][1] = w[i].a[2][2] = 1;
  }
  Matrix<long double> v(1, 3);
  v.a[0][2] = 1;
  for (int i = 1; i < m && t > 0; i++) {
    long long l = 0, r = t;
    Matrix<double> tw = w[i];
    while (l < r) {
      long long mid = l + r + 1 >> 1;
      Matrix<long double> tmp = v * tw.qpow(mid - 1);
      if ((tmp * w[i]).a[0][0] >= (tmp * w[i + 1]).a[0][0])
        l = mid;
      else
        r = mid - 1;
    }
    v = v * w[i].qpow(l);
    t -= l;
  }
  v = v * w[m].qpow(t);
  printf("%.7lf\n", (double)v.a[0][0]);
  return 0;
}
