#include <bits/stdc++.h>
using namespace std;
typedef struct _Point {
  double x;
  double y;
  double angle;
  _Point() {}
  _Point(double _x, double _y) {
    x = _x;
    y = _y;
  }
} Point;
int n;
long long L, R;
Point p[20];
double eps = 1e-6;
double dp[1 << 20];
double Furthest(Point, double);
double magnitude(double, double);
double getDistance(Point, Point);
bool comp(int, int);
unsigned int getBit(unsigned int, int);
void clearBit(unsigned int &, int);
int main() {
  cin >> n >> L >> R;
  for (int i = 0; i < n; i++) {
    cin >> p[i].x >> p[i].y >> p[i].angle;
    p[i].angle = p[i].angle / 180.0 * 3.14159265;
  }
  dp[0] = L;
  for (unsigned int i = 1; i < (1 << n); i++) {
    dp[i] = L;
    for (int j = 0; j < n; j++)
      if (getBit(i, j)) {
        unsigned int y = i;
        clearBit(y, j);
        double delta = Furthest(p[j], dp[y]);
        dp[i] = max(dp[i], delta);
      }
  }
  fprintf(stdout, "%.7lf\n", dp[(1 << n) - 1] - L);
  return 0;
}
unsigned int getBit(unsigned int x, int i) { return ((x & (1 << i)) != 0); }
void clearBit(unsigned int &x, int i) { x = x & (~(1 << i)); }
double magnitude(double a, double b) { return (sqrt(a * a + b * b)); }
double getDistance(Point a, Point b) {
  double dx = a.x - b.x;
  double dy = a.y - b.y;
  return sqrt(dx * dx + dy * dy);
}
double Furthest(Point t, double d) {
  double YY = atan((R - t.x) / t.y);
  double DU = min(YY, atan((d - t.x) / t.y) + t.angle);
  return tan(DU) * t.y + t.x;
}
bool comp(int a, int b) {
  return (__builtin_popcount(a) < __builtin_popcount(b));
}
