#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<string>
#include<vector>
#include<map>
#include<set>
#include<list>
#include<queue>
#include<deque>
#include<algorithm>
#include<numeric>
#include<utility>
#include<complex>
#include<functional>
 
using namespace std;

/* constant */

const int MAX_T = 86400;

/* typedef */

struct Sched {
  int s, t, u;
  Sched() {}
  Sched(int _s, int _t, int _u): s(_s), t(_t), u(_u) {}
};

typedef vector<Sched> vs;

/* global variables */

/* subroutines */

bool check(vs& scds, double p, double c) {
  double w = c;
  for (int cnt = 0; cnt < 2; cnt++) {
    double w0 = w;
    for (vs::iterator vit = scds.begin(); vit != scds.end(); vit++) {
      double dw = (p - vit->u) * (vit->t - vit->s);
      w += dw;
      if (w <= 0.0) return false;
      if (w > c) w = c;
    }
    if (cnt > 0 && w < w0) return false;
  }

  return true;
}

/* main */

int main() {
  for (;;) {
    int n;
    double l;
    cin >> n >> l;
    if (n == 0) break;

    vs scds;
    int prev = 0;

    for (int i = 0; i < n; i++) {
      int s, t, u;
      cin >> s >> t >> u;
      if (prev < s)
	scds.push_back(Sched(prev, s, 0));
      scds.push_back(Sched(s, t, u));
      prev = t;
    }
    if (prev < MAX_T)
      scds.push_back(Sched(prev, MAX_T, 0));

    double p0 = 0.0, p1 = 1e7;

    for (int i = 0; i < 50; i++) {
      double p = (p0 + p1) / 2;
      if (check(scds, p, l)) p1 = p;
      else p0 = p;
    }

    printf("%.8lf\n", (p0 + p1) / 2);
  }

  return 0;
}