#include <bits/stdc++.h>
using namespace std;
void fre() {
  system("clear"), freopen("A.txt", "r", stdin);
  freopen("Ans.txt", "w", stdout);
}
void Fre() { system("clear"), freopen("A.txt", "r", stdin); }
void Run(int x = 0) {}
const int N = 1 << 20;
int n;
double l, r, dp[N];
struct point {
  double x, y, d;
  void scan() {
    scanf("%lf %lf %lf", &x, &y, &d);
    d = d * acos(-1) / 180;
    x -= l;
    y = abs(y);
  }
} p[N];
void init() {
  memset(dp, (int)0, sizeof dp);
  ;
  scanf("%d %lf %lf", &n, &l, &r);
  r -= l;
  for (long long i = (long long)(0); i <= (long long)(n - 1); i++) p[i].scan();
}
double f(int id, double x0) {
  double du1 = atan((r - p[id].x) / p[id].y);
  double du2 = atan((x0 - p[id].x) / p[id].y) + p[id].d;
  double du = min(du1, du2);
  return p[id].x + tan(du) * p[id].y;
}
double sov() {
  int s = (1 << n) - 1;
  for (long long i = (long long)(0); i <= (long long)(s); i++) {
    for (long long j = (long long)(0); j <= (long long)(n - 1); j++) {
      if (i & (1 << j)) continue;
      dp[i | (1 << j)] = max(dp[i | (1 << j)], f(j, dp[i]));
    }
  }
  return dp[s];
}
int main() {
  Run();
  init();
  printf("%.9f", sov());
  return 0;
}
