#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //#define NU_DEBUG using namespace std; #define REP(i,n) for(int i = 0; i < (int)(n); i++) #define FOR(i,c) for(__typeof((c).begin()) i = (c).begin(); i != (c).end(); ++i) #define ALLOF(c) (c).begin(), (c).end() typedef double decimal; const decimal EPS = 1e-8; struct Schedule { int s, t, u; }; bool operator<(const Schedule& a, const Schedule& b){ return a.s < b.s; } const int MAXS = 86400; const decimal MAXU = 1e6; Schedule sc[86410]; int N; decimal capa; decimal simulate(decimal x, decimal init){ decimal curWater = init; int curTime = 0; REP(i, N){ if(curWater < -EPS){ return curWater; } curWater += x * (sc[i].s - curTime); curWater = min(curWater, capa); curWater += (x - sc[i].u) * (sc[i].t - sc[i].s); curWater = min(curWater, capa); curTime = sc[i].t; } return curWater; } decimal solve(){ decimal lo = 0.0, hi = MAXU * 2; while(hi - lo > 1e-8){ decimal x = (lo+hi)/2; decimal l1 = simulate(x, capa); decimal l2 = simulate(x, l1); if(l1 < 0.0 || l2 < 0.0 || l2 < l1 - EPS){ lo = x; }else{ hi = x; } } return (lo+hi)/2; } int main(){ while(cin >> N >> capa){ if(N == 0 && capa == 0) break; REP(i, N){ int s, t, u; cin >> s >> t >> u; sc[i].s = s; sc[i].t = t; sc[i].u = u; } sort(sc, sc+N); sc[N].s = MAXS; sc[N].t = MAXS; sc[N].u = 0; N++; cout << fixed << showpoint << setprecision(10) << solve() << endl; } return 0; }