#include <bits/stdc++.h>
using namespace std;
int n, cnt;
long long t;
long double mx;
struct line {
  long double k, b, r;
} c[100005], d[100005];
struct mat {
  long double s[3][3];
  mat() { memset(s, 0, sizeof(s)); }
  friend mat operator*(const mat &x, const mat &y) {
    mat res;
    for (int i = 0; i < 3; i++)
      for (int j = 0; j < 3; j++)
        for (int k = 0; k < 3; k++) res.s[i][j] += x.s[i][k] * y.s[k][j];
    return res;
  }
} tr[35];
bool cmp(line x, line y) {
  return fabs(x.k - y.k) < 1e-12 ? x.b < y.b : x.k < y.k;
}
int main() {
  double x, y, z;
  scanf("%d%lld", &n, &t);
  for (int i = 1; i <= n; i++)
    scanf("%lf%lf%lf", &x, &y, &z), mx = max(mx, (long double)y * z),
                                    c[i].k = z, c[i].b = x * z;
  sort(c + 1, c + n + 1, cmp);
  for (int i = 1; i <= n; i++)
    while (1) {
      if (!cnt) {
        d[cnt = 1] = c[i];
        break;
      }
      if (fabs(c[i].k - d[cnt].k) < 1e-12 && c[i].b > d[cnt].b) {
        cnt--;
        continue;
      }
      double tmp = (c[i].b - d[cnt].b) / (d[cnt].k - c[i].k);
      if (cnt > 1 && tmp - c[cnt - 1].r < -1e-12) {
        cnt--;
        continue;
      }
      d[cnt].r = tmp;
      d[++cnt] = c[i];
      break;
    }
  d[cnt].r = 1e22;
  long long now = 0;
  mat res;
  res.s[0][0] = res.s[1][1] = res.s[2][2] = 1;
  for (int i = 1; i <= cnt; i++) {
    if (d[i].r < now * mx - res.s[0][2]) continue;
    tr[0].s[0][0] = 1.0 - d[i].k, tr[0].s[0][1] = d[i].k * mx,
    tr[0].s[0][2] = d[i].b;
    tr[0].s[1][1] = tr[0].s[1][2] = tr[0].s[2][2] = 1;
    for (int j = 1; j <= 34; j++) tr[j] = tr[j - 1] * tr[j - 1];
    for (long long j = 34; j >= 0; j--) {
      if (now + (1ll << j) >= t) continue;
      mat tmp = tr[j] * res;
      if ((now + (1ll << j)) * mx - tmp.s[0][2] < d[i].r)
        res = tmp, now += (1ll << j);
    }
    res = tr[0] * res, now++;
    if (now == t) break;
  }
  printf("%.12lf", ((double)res.s[0][2]));
  return 0;
}
