#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1.0);
const double EPS = 1e-9;
const int infi = (int)1e9;
const long long infl = (long long)1e16;
const int MOD = (int)1e9 + 7;
const int MAX = (int)1e5 + 10;
const int dx[] = {1, -1, 0, 0, 1, 1, -1, -1};
const int dy[] = {0, 0, -1, 1, 1, -1, 1, -1};
const int kdx[] = {1, 1, -1, -1, 2, 2, -2, -2};
const int kdy[] = {2, -2, 2, -2, 1, -1, 1, -1};
struct point {
  long long x, y, ang;
  point() {}
  point(long long a, long long b, long long c) {
    x = a;
    y = b;
    ang = c;
  }
} p;
long long n, l, r;
vector<point> v;
double solve(double pos, point x) {
  double ang1 = (PI * x.ang) / 180;
  double ang2 = atan2(x.y, x.x - pos);
  if (ang1 + ang2 >= PI) {
    return (double)r;
  }
  double ang3 = PI - ang2 - ang1;
  double l3 = hypot(x.y, x.x - pos);
  double l1 = l3 * (sin(ang1) / sin(ang3));
  return l1;
}
double memo[1 << 20];
double dp(long long mask) {
  if (mask == 0) {
    return (double)l;
  }
  double &ret = memo[mask];
  if (ret != -1.0) return ret;
  ret = (double)l;
  for (int i = 0; i < n; i++) {
    if (!(mask & (1 << i))) continue;
    long long nmask = mask ^ (1 << i);
    double val = dp(nmask);
    ret = max(ret, val + solve(val, v[i]));
  }
  return min(ret, (double)r);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> l >> r;
  for (int i = 0; i < n; i++) {
    long long x, y, a;
    cin >> x >> y >> a;
    v.push_back(point(x, y, a));
  }
  long long mask = 0;
  for (int i = 0; i < n; i++) mask |= (1 << i);
  for (int i = 0; i < (1 << 20); i++) memo[i] = -1.0;
  cout << setprecision(10) << fixed;
  cout << dp(mask) - l << "\n";
  return 0;
}
