#include <bits/stdc++.h>
using namespace std;
const int N = 20;
const double pi = acos(-1.0);
const double eps = 1e-8;
struct point {
  int x, y;
  double a;
  void read() {
    scanf("%d%d%lf", &x, &y, &a);
    a = a / 180 * pi;
  }
} a[N];
double dp[1 << N];
int main() {
  int n, lt, rt;
  cin >> n >> lt >> rt;
  for (int i = 0; i < n; i++) a[i].read();
  for (int i = 0; i < (1 << n); i++) dp[i] = -1e20;
  dp[0] = lt;
  if (lt == rt) {
    cout << 0 << endl;
    return 0;
  }
  double ans = 0;
  for (int i = 0; i < (1 << n); i++) {
    ans = max(ans, dp[i] - lt);
    if (dp[i] + eps >= rt) {
      cout << rt - lt << endl;
      return 0;
    }
    for (int j = 0; j < n; j++) {
      if (i & (1 << j)) continue;
      if (dp[i] + eps >= a[j].x) {
        double ang1 = atan2(dp[i] - a[j].x, a[j].y) + a[j].a;
        if (ang1 + eps >= pi / 2) {
          cout << rt - lt << endl;
          return 0;
        }
        double x = tan(ang1) * a[j].y + a[j].x;
        dp[i ^ (1 << j)] = max(dp[i ^ (1 << j)], x);
        if (x + eps >= rt) {
          cout << rt - lt << endl;
          return 0;
        }
      } else {
        double ang = atan2(a[j].x - dp[i], a[j].y);
        double x;
        if (ang + eps >= a[j].a) {
          ang -= a[j].a;
          x = a[j].x - a[j].y * tan(ang);
        } else {
          ang = a[j].a - ang;
          x = a[j].x + a[j].y * tan(ang);
        }
        dp[i ^ (1 << j)] = max(dp[i ^ (1 << j)], x);
      }
    }
  }
  printf("%.20lf\n", ans);
  return 0;
}
