#include <bits/stdc++.h>
using namespace std;
double eps = 1e-6;
double pi = atan(1) * 4;
struct vect2D {
  double x, y;
  vect2D() { x = y = 0; }
  vect2D(double _x, double _y) { x = _x, y = _y; }
  vect2D operator+(vect2D u) { return vect2D(x + u.x, y + u.y); }
  vect2D operator-(vect2D u) { return vect2D(x - u.x, y - u.y); }
  vect2D to(vect2D& u) { return vect2D(u.x - x, u.y - y); }
  vect2D operator*(double u) { return vect2D(x * u, y * u); }
  vect2D operator/(double u) { return vect2D(x / u, y / u); }
  bool operator==(vect2D that) {
    return abs(x - that.x) + abs(y - that.y) < eps;
  }
  double dotProd(vect2D u) { return x * u.x + y * u.y; }
  double crossProd(vect2D u) { return x * u.y - y * u.x; }
  double len() { return sqrt(x * x + y * y); }
  double len2() { return x * x + y * y; }
  double dist() { return sqrt(x * x + y * y); }
  double signedAngleRad(vect2D u) {
    if (dotProd(u) < 0) return pi - asin(crossProd(u) / (len() * u.len()));
    return asin(crossProd(u) / (len() * u.len()));
  }
  double signedAngleDeg(vect2D u) { return signedAngleRad(u) / pi * 180; }
  vect2D resize(double u) { return (*this) * (u / len()); }
  vect2D normalize() { return resize(1); }
  vect2D projectTo(vect2D u) { return u.resize(dotProd(u.normalize())); }
  vect2D tangentTo(vect2D u) { return (*this) - projectTo(u); }
  friend ostream& operator<<(ostream& os, const vect2D& v) {
    return os << "(" << v.x << ", " << v.y << ")";
  }
} P[21];
int n;
int deg[21];
int L, R;
double go(double now, int id) {
  vect2D A(R, 0), B(now, 0), C = P[id];
  if (abs(C.to(A).signedAngleDeg(C.to(B))) < deg[id]) return R;
  double ang = atan2(now - P[id].x, P[id].y) + deg[id] / 180.0 * pi;
  return P[id].x + P[id].y * tan(ang);
}
double ans[1 << 20];
int cntBit(int x) {
  int ret = 0;
  while (x) {
    ret += x & 1;
    x /= 2;
  }
  return ret;
}
int MAIN() {
  srand((unsigned)time(NULL));
  cin >> n >> L >> R;
  for (int i = 1; i <= n; i++) {
    cin >> P[i].x >> P[i].y >> deg[i];
  }
  for (int i = 0; i < (1 << n); i++) ans[i] = L;
  for (int b = 0; b < n; b++)
    for (int mask = 0; mask < (1 << n); mask++)
      if (cntBit(mask) == b)
        for (int j = 0; j < n; j++)
          if ((mask & (1 << j)) == 0)
            ans[mask | (1 << j)] =
                max(ans[mask | (1 << j)], go(ans[mask], j + 1));
  cout << ans[(1 << n) - 1] - L << endl;
  return 0;
}
int main() {
  ios ::sync_with_stdio(false);
  cout << fixed << setprecision(16);
  return MAIN();
}
