#include <bits/stdc++.h>
using namespace std;
const int N = 100003;
const double eps = 1e-13;
template <typename T>
void read(T &x) {
  int ch = getchar();
  x = 0;
  bool f = false;
  for (; ch < '0' || ch > '9'; ch = getchar()) f |= ch == '-';
  for (; ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
  if (ch == '.') {
    double d = 1;
    while (true) {
      ch = getchar();
      d *= 0.1;
      if (ch < '0' || ch > '9') break;
      x += d * (ch - '0');
    }
  }
  if (f) x = -x;
}
template <typename T>
bool chmax(T &a, const T &b) {
  if (a < b) return a = b, 1;
  return 0;
}
template <typename T>
bool chmin(T &a, const T &b) {
  if (a > b) return a = b, 1;
  return 0;
}
int n, a[N], b[N], m;
long long t;
double p[N], M;
struct Point {
  double x, y;
  Point(double _x = 0, double _y = 0) : x(_x), y(_y) {}
  bool operator<(const Point &o) const {
    return fabs(x - o.x) < eps ? y > o.y : x < o.x;
  }
  Point operator-(const Point &o) const { return Point(x - o.x, y - o.y); }
  double operator*(const Point &o) const { return x * o.y - y * o.x; }
} pr[N], hul[N];
struct Mat {
  double A[3][3];
  Mat() { memset(A, 0, sizeof A); }
  Mat operator*(const Mat &o) const {
    Mat res;
    for (int i = 0; i < 3; ++i)
      for (int k = 0; k < 3; ++k)
        for (int j = 0; j < 3; ++j) res.A[i][j] += A[i][k] * o.A[k][j];
    return res;
  }
} Cat[34];
int main() {
  read(n);
  read(t);
  for (int i = 1; i <= n; ++i) {
    read(a[i]);
    read(b[i]);
    read(p[i]);
    pr[i].x = p[i];
    pr[i].y = p[i] * a[i];
    chmax(M, p[i] * b[i]);
  }
  sort(pr + 1, pr + n + 1);
  for (int i = 1; i <= n; ++i) {
    if (fabs(pr[i].x - pr[i - 1].x) < eps) continue;
    while (m > 1 && (hul[m] - hul[m - 1]) * (pr[i] - hul[m - 1]) > 0) --m;
    hul[++m] = pr[i];
  }
  long long tim = 0;
  double cur = 0;
  int now = 1;
  Mat Cats;
  Cats.A[2][0] = 1;
  while (tim < t) {
    while (now < m &&
           (hul[now + 1].y - hul[now].y) > cur * (hul[now].x - hul[now + 1].x))
      ++now;
    Cat[0].A[0][0] = 1 - hul[now].x;
    Cat[0].A[0][1] = hul[now].x * M;
    Cat[0].A[0][2] = hul[now].y;
    Cat[0].A[1][1] = Cat[0].A[1][2] = Cat[0].A[2][2] = 1;
    Cat[0].A[1][0] = Cat[0].A[2][0] = Cat[0].A[2][1] = 0;
    for (int i = 1; i < 34; ++i) Cat[i] = Cat[i - 1] * Cat[i - 1];
    for (int i = 33; ~i; --i) {
      if (tim + (1ll << i) >= t) continue;
      Mat NCat = Cat[i] * Cats;
      double expS = NCat.A[1][0] * M - NCat.A[0][0];
      if (now == m || (hul[now + 1].y - hul[now].y) <
                          expS * (hul[now].x - hul[now + 1].x)) {
        Cats = NCat;
        tim += 1ll << i;
      }
    }
    Cats = Cat[0] * Cats;
    ++tim;
    cur = Cats.A[1][0] * M - Cats.A[0][0];
  }
  printf("%.7lf\n", Cats.A[0][0]);
}
