#include <bits/stdc++.h>
using namespace std;
double r, L;
double b, u, A;
double x, y, a;
double D[95], B[95];
struct st {
  double x, y, a;
};
st bear[50];
int t;
double fun(int i, double l) {
  x = bear[i].x;
  y = bear[i].y;
  t = bear[i].a;
  a = B[t];
  b = (fabs(l - x) / y);
  A = D[t];
  if (x < l)
    u = ((A + b) / (1 - A * b)) * y - l + x;
  else {
    if (a < b)
      u = x - l - ((b - A) / (1 + b * A)) * y;
    else
      u = ((A - b) / (1 + A * b)) * y + x - l;
  }
  if (u < 0) return 1e9;
  return u;
}
const int N = (1 << 20) + 10;
double d[N][22];
int main() {
  for (int i = 1; i <= 90; i++) {
    B[i] = i * acosl(-1) / 180;
    D[i] = tan(B[i]);
  }
  double l;
  int n;
  cin >> n >> l >> r;
  L = l;
  for (int i = 0; i < n; i++) cin >> bear[i].x >> bear[i].y >> bear[i].a;
  int m = (1 << n) - 1, i, j, k;
  double ans = -1e9;
  for (i = 1; i <= m; i++) {
    for (j = 0; j < n; j++) {
      if (((1 << j) & i)) {
        d[i][j] = -1e9;
        if ((1 << j) == i) {
          d[i][j] = l + fun(j, l);
          ans = max(ans, d[i][j]);
        } else {
          for (k = 0; k < n; k++) {
            if (((1 << k) & i) && j != k) {
              d[i][j] =
                  max(d[i][j], d[i ^ (1 << j)][k] + fun(j, d[i ^ (1 << j)][k]));
              ans = max(ans, d[i][j]);
            }
          }
        }
      }
    }
  }
  printf("%.6f", min(ans - L, r - L));
}
