#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
const double eps = 1e-10;
int n, c;
long long T;
struct Line {
  double k, b;
  bool operator<(const Line& B) const {
    if (fabs(k - B.k) > eps)
      return k > B.k;
    else
      return b < B.b;
  }
} L[N], st[N];
double pos[N], mx;
double calc(double x, Line v, long long m) {
  double b = v.b + mx;
  double a = 1 + v.k, val = pow(a, m);
  return x * val + (1 - val) / (1 - a) * b;
}
int main() {
  cin >> n >> T;
  for (int i = 1; i <= n; i++) {
    int a, b;
    double p;
    scanf("%d%d%lf", &a, &b, &p);
    mx = max(mx, b * p);
    L[i] = (Line){-p, -p * a};
  }
  sort(L + 1, L + n + 1);
  for (int i = 1; i <= n; i++) {
    if (fabs(L[i].k - L[i - 1].k) <= eps) continue;
    while (c && pos[c] * L[i].k + L[i].b < pos[c] * st[c].k + st[c].b) --c;
    st[++c] = L[i],
    pos[c] = c == 1 ? 0 : (st[c].b - st[c - 1].b) / (st[c - 1].k - st[c].k);
  }
  pos[c + 1] = 1e100;
  long long x = 0;
  double dp = 0;
  for (int i = 1; i <= c; i++) {
    long long l = 0, r = T - x;
    while (l < r) {
      long long mid = (l + r) / 2;
      if (calc(dp, st[i], mid) > pos[i + 1])
        r = mid;
      else
        l = mid + 1;
    }
    x += l;
    dp = calc(dp, st[i], l);
    if (x == T) break;
  }
  printf("%.10lf\n", T * mx - dp);
  return 0;
}
