#include <bits/stdc++.h>
using namespace std;
const long double eps = 1e-8;
const long double PI = acosl(-1);
struct PT {
  long double x, y;
  PT(long double x = 0, long double y = 0) : x(x), y(y) {}
  PT operator+(const PT P) { return PT(x + P.x, y + P.y); }
  PT operator-(const PT P) { return PT(x - P.x, y - P.y); }
  PT operator*(const long double d) { return PT(x * d, y * d); }
  PT operator/(const long double d) { return PT(x / d, y / d); }
  long double operator*(const PT P) { return x * P.x + y * P.y; }
  long double operator^(const PT P) { return x * P.y - y * P.x; }
  bool operator<(const PT &P) {
    if (fabs(x - P.x) < eps) return y < P.y;
    return x < P.x;
  }
  bool operator==(const PT &P) { return (*this - P).dist() < eps; }
  long double dist() { return sqrt(x * x + y * y); }
  long double angle() {
    long double a = atan2l(y, x);
    if (a < 0) a += 2 * PI;
    return a;
  }
  PT normalize() { return *this / dist(); }
  PT rotateCCW(long double t = PI / 2) {
    return PT(x * cosl(t) - y * sinl(t), x * sinl(t) + y * cosl(t));
  }
  PT rotateCW(long double t = PI / 2) { return rotateCCW(2 * PI - t); }
  bool cw(PT a, PT b) { return ((*this - a) ^ (b - a)) < -eps; }
  bool ccw(PT a, PT b) { return ((*this - a) ^ (b - a)) > eps; }
  bool aligned(PT a, PT b) { return fabs((*this - a) ^ (b - a)) < eps; }
};
long long n, l, r;
long double dp[(1 << 20)];
PT points[20];
long double angles[20];
int main() {
  cin.tie(0);
  ios::sync_with_stdio(0);
  cin >> n >> l >> r;
  long long a, b, c;
  for (int i = 0; i < n; i++) {
    cin >> a >> b >> c;
    points[i] = PT(a, b);
    angles[i] = c;
  }
  cout << fixed << setprecision(10);
  bool flag = false;
  for (int i = 0; i < (1 << n); i++) {
    dp[i] = l;
    for (int j = 0; j < n; j++) {
      if (i & (1 << j)) {
        PT vec = PT(dp[i ^ (1 << j)] - points[j].x, -1.0 * points[j].y);
        PT rot = vec.rotateCCW(angles[j] * (PI / 180.0));
        if (rot.y > -eps) flag = true;
        rot = rot * (1.0 / rot.y);
        long double res = points[j].x - (points[j].y * rot.x);
        dp[i] = max(dp[i], res);
      }
    }
  }
  if (flag) dp[(1 << n) - 1] = r;
  cout << min(dp[(1 << n) - 1] - (long double)l, (long double)(r - l)) << '\n';
  return 0;
}
