#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int n, top, stk[N], now = 1;
long long t, s;
double _a, _b, _p;
long double ans, Pow[40], M;
pair<long double, long double> l[N];
int main() {
  cin >> n >> t;
  for (int i = 1; i <= n; i++)
    scanf("%lf%lf%lf", &_a, &_b, &_p),
        l[i] = pair<long double, long double>(_p, _a),
        ans = max(ans, (long double)_a * _p), M = max(M, (long double)_b * _p);
  sort(l + 1, l + 1 + n);
  for (int i = 1; i <= n; i++) {
    while (top && l[stk[top]].first == l[i].first ||
           top > 1 && (l[stk[top]].first * l[stk[top]].second -
                       l[i].first * l[i].second) *
                              (l[stk[top]].first - l[stk[top - 1]].first) <=
                          (l[stk[top - 1]].first * l[stk[top - 1]].second -
                           l[stk[top]].first * l[stk[top]].second) *
                              (l[i].first - l[stk[top]].first))
      top--;
    stk[++top] = i;
  }
  while (s ^ t - 1) {
    while (now < top &&
           l[stk[now]].first * (l[stk[now]].second + (s + 1) * M - ans) <=
               l[stk[now + 1]].first *
                   (l[stk[now + 1]].second + (s + 1) * M - ans))
      now++;
    long double p = l[stk[now]].first, a = l[stk[now]].second;
    int L = 1;
    Pow[0] = 1 - p;
    while (1ll << L <= t - 1 - s) Pow[L] = Pow[L - 1] * Pow[L - 1], L++;
    long long d = 0;
    long double nowp = 1 / (1 - p), _ = s * M - (1 - p) / p * M + a;
    while (~--L)
      if (d + (1ll << L) + s <= t - 1) {
        long double x = (s + 1) * M - nowp * Pow[L] * (ans - _) - _;
        if (now == top ||
            p * (a + x) > l[stk[now + 1]].first * (l[stk[now + 1]].second + x))
          d += 1ll << L, nowp *= Pow[L];
      }
    if (!d) d = 1, nowp = 1;
    ans = (1 - p) * nowp * (ans - _) + _ + d * M, s += d;
  }
  printf("%.10Lf\n", ans);
  return 0;
}
