#include <bits/stdc++.h>
#pragma comment(linker, "/stack:16777216")
using namespace std;
const double Pi = acos(-1.0);
const int INF = 1000 * 1000 * 1000 + 7;
const long long LINF = INF * (long long)INF;
const int MAX = 512;
const int MAX1 = 2007;
const int MAX2 = 24000000;
const int LEN = 21;
const int BASE = 1000000000;
const double EPS = 1e-8;
int n, l, r;
int X[MAX];
int Y[MAX];
double A[MAX];
double R[1 << 20];
double get(double x, int id) {
  double yy = Y[id];
  double xx = abs(x - X[id]);
  double zz = sqrt(xx * xx + yy * yy);
  double sa = xx / zz;
  if (sa < -1) sa = -1;
  if (sa > 1) sa = 1;
  double a = asin(sa);
  if (x < X[id]) a *= -1;
  a += A[id];
  if (a + EPS >= Pi / 2) {
    return INF;
  }
  if (a < 0) {
    double tg = tan(abs(a));
    return X[id] - x - yy * tg;
  } else {
    double tg = tan(a);
    return yy * tg - (x - X[id]);
  }
  return 0;
}
int main() {
  cin >> n >> l >> r;
  for (int i = (0); i < (n); ++i) {
    cin >> X[i] >> Y[i] >> A[i];
    A[i] = A[i] / 180.0 * Pi;
  }
  for (int i = (0); i < ((1 << n)); ++i) R[i] = l;
  for (int i = (0); i < ((1 << n)); ++i) {
    double x = R[i];
    for (int j = (0); j < (n); ++j)
      if ((i & (1 << j)) == 0) {
        double add = get(x, j);
        double w = min(x + add, r * 1.0);
        R[i | (1 << j)] = max(R[i | (1 << j)], w);
      }
  }
  double res = l;
  for (int i = (0); i < ((1 << n)); ++i) res = max(res, R[i]);
  res -= l;
  printf("%0.11f\n", res);
  return 0;
}
