#include <bits/stdc++.h>
#pragma warning(disable : 4996)
using namespace std;
const int N = 21;
struct Point {
  double x, y, angle;
  Point() {}
  Point(double _x, double _y) : x(_x), y(_y) {}
  void input() { scanf("%lf%lf", &x, &y); }
  void print() { printf("(%f,%f)  angle:%f\n", x, y, 0); }
} p[N];
double dp[1 << N], s, t;
int n;
struct Line {
  Point a, b;
  Line() {}
  Line(Point _a, Point _b) : a(_a), b(_b) {}
};
Point intersection(Line u, Line v) {
  Point ret = u.a;
  double t =
      ((u.a.x - v.a.x) * (v.a.y - v.b.y) - (u.a.y - v.a.y) * (v.a.x - v.b.x)) /
      ((u.a.x - u.b.x) * (v.a.y - v.b.y) - (u.a.y - u.b.y) * (v.a.x - v.b.x));
  ret.x += (u.b.x - u.a.x) * t;
  ret.y += (u.b.y - u.a.y) * t;
  return ret;
}
Point rotate(Point A, double rad) {
  double Sin = sin(rad), Cos = cos(rad);
  return Point(A.x * Cos - A.y * Sin, A.x * Sin + A.y * Cos);
}
inline void update(double &a, double b) {
  a = max(a, b);
  a = min(a, t);
}
int parallel(Line u, Line v) {
  return ((((u.a.x - u.b.x) * (v.a.y - v.b.y) -
            (v.a.x - v.b.x) * (u.a.y - u.b.y)) > 0
               ? ((u.a.x - u.b.x) * (v.a.y - v.b.y) -
                  (v.a.x - v.b.x) * (u.a.y - u.b.y))
               : -((u.a.x - u.b.x) * (v.a.y - v.b.y) -
                   (v.a.x - v.b.x) * (u.a.y - u.b.y))) < 1e-6);
}
int main() {
  cin >> n >> s >> t;
  for (int i = 0; i < n; i++) {
    cin >> p[i].x >> p[i].y >> p[i].angle;
    p[i].angle = p[i].angle * acos(-1.0) / 180.0;
  }
  for (int i = 0; i < 1 << n; i++) dp[i] = s;
  Line l1 = Line(Point(0, 0), Point(t, 0));
  bool spe = false;
  for (int i = 0; i < 1 << n; i++) {
    for (int j = 0; j < n; j++) {
      if ((i >> j) & 1) continue;
      Point v = Point(dp[i], 0);
      Point s = p[j];
      Point ret = rotate(Point(dp[i] - p[j].x, -p[j].y), p[j].angle);
      ret.x += p[j].x;
      ret.y += p[j].y;
      Line l2 = Line(p[j], ret);
      if (parallel(l1, l2) == true) {
        spe = true;
        break;
      }
      Point x = intersection(l1, l2);
      if (x.x < dp[i]) {
        spe = true;
      }
      update(dp[i | (1 << j)], x.x);
    }
  }
  if (spe == true) dp[(1 << n) - 1] = t;
  printf("%.10f\n", min(t, dp[(1 << n) - 1]) - s);
  return 0;
}
