#include #include #include #include #define REP(i,a,b) for(i=a;ik2);if(i>=j)break;t=d[i];d[i]=d[j];d[j]=t;r=m[i];m[i]=m[j];m[j]=r;}doubleIntSort(d,m,i);doubleIntSort(d+j+1,m+j+1,s-j-1);} double X[50000], Y[50000], Z[50000]; double a[50000], b[50000]; int ind[50000]; int main(){ int N; double L, R; int i; double A, B, C, now, pi = acos(0)*2; assert( scanf("%d%lf%lf",&N,&L,&R)==3 ); assert( 1<=N && N<=50000 ); assert( -1000 <= L && L < R && R <= 1000 ); rep(i,N){ assert( scanf("%lf%lf%lf",X+i,Y+i,Z+i)==3 ); assert( -1000<=X[i] && X[i]<=1000 ); assert( 0 1e-6){ C = (A+B)/2; rep(i,N){ if(Y[i] <= C){ a[i] = b[i] = -1e100; continue; } a[i] = X[i] - (Y[i]-C) * Z[i]; b[i] = X[i] + (Y[i]-C) * Z[i]; } rep(i,N) ind[i] = i; doubleIntSort(a, ind, N); now = L; rep(i,N){ if(a[i] > now) break; if(now < b[ind[i]]) now = b[ind[i]]; } if(now >= R) A=C; else B=C; } printf("%.10f\n",(A+B)/2); return 0; }