#include <bits/stdc++.h>
using namespace std;
const double INF = 1e18;
const double PI = acos(-1);
const int N = 20;
const int MAX = 1 << N;
double x[N], y[N], a[N], dp[MAX];
vector<int> v[N + 1];
int cnt(int x) {
  int res = 0;
  while (x) {
    res += x % 2;
    x >>= 1;
  }
}
double mult(double x1, double y1, double x2, double y2) {
  return x1 * x2 + y1 * y2;
}
double len(double x, double y) { return sqrt(x * x + y * y); }
double corner(double x1, double y1, double x2, double y2) {
  return acos(mult(x1, y1, x2, y2) / (len(x1, y1) * len(x2, y2)));
}
double f(double z, int i) {
  if (x[i] <= z) {
    double c = a[i] + corner(x[i] - z, y[i], 0, y[i]);
    return c >= PI / 2 ? INF : y[i] * tan(c) - (z - x[i]);
  } else {
    double t = corner(z - x[i], y[i], 0, y[i]);
    if (a[i] >= t) {
      double c = a[i] - t;
      return c >= PI / 2 ? INF : x[i] - z + (y[i] * tan(c));
    } else
      return x[i] - z - (y[i] * tan(t - a[i]));
  }
}
int main() {
  int n;
  double l, r, ans = -INF;
  cin >> n >> l >> r;
  for (int i = 0; i < n; i++) {
    cin >> x[i] >> y[i] >> a[i];
    a[i] *= PI / 180.0;
  }
  for (int i = 0; i < (1 << n); i++) v[cnt(i)].push_back(i);
  for (int i = 0; i < MAX; i++) dp[i] = -INF;
  dp[0] = l;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < v[i].size(); j++) {
      int mask = v[i][j];
      if (dp[mask] == -INF || dp[mask] > r) continue;
      for (int k = 0; k < n; k++)
        if (!(mask & (1 << k)))
          dp[mask | (1 << k)] =
              max(dp[mask | (1 << k)], dp[mask] + f(dp[mask], k));
    }
  for (int i = 0; i < MAX; i++) ans = max(ans, dp[i]);
  printf("%.10lf", min(r, ans) - l);
  return 0;
}
