#include <bits/stdc++.h>
#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
#pragma GCC target( \
    "sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native")
using namespace std;
namespace cst {
const double pi = acos(-1.0);
const int MIN_INT8 = -128;
const int MIN_INT16 = -32768;
const int MIN_INT = -2147483647 - 1;
const long long MIN_LL = -9223372036854775807LL - 1;
const int MAX_INT8 = 127;
const int MAX_INT16 = 32767;
const int MAX_INT = 2147483647;
const long long MAX_LL = 9223372036854775807LL;
}  // namespace cst
namespace t {
template <typename T>
inline const T gcd(T __m, T __n) {
  while (__n != 0) {
    T __t = __m % __n;
    __m = __n;
    __n = __t;
  }
  return __m;
}
template <typename T>
inline const T max(const T &a, const T &b) {
  return a > b ? a : b;
}
template <typename T>
inline const T min(const T &a, const T &b) {
  return a < b ? a : b;
}
template <typename T>
inline const T abs(const T &a) {
  return a > 0 ? a : -a;
}
template <typename T>
inline void in(T &x) {
  register T res = 0;
  register int neg = 1;
  char c = getchar();
  for (; !isdigit(c); c = getchar()) {
    if (c == '-') {
      neg = -1;
    }
  }
  for (; isdigit(c); c = getchar()) {
    res = res * 10 + c - '0';
  }
  x = res * neg;
}
inline int read() {
  register int res = 0, neg = 1;
  char c = getchar();
  for (; !isdigit(c); c = getchar()) {
    if (c == '-') {
      neg = -1;
    }
  }
  for (; isdigit(c); c = getchar()) {
    res = res * 10 + c - '0';
  }
  return res * neg;
}
inline long long read_ll() {
  register long long res = 0, neg = 1;
  char c = getchar();
  for (; !isdigit(c); c = getchar()) {
    if (c == '-') {
      neg = -1;
    }
  }
  for (; isdigit(c); c = getchar()) {
    res = res * 10 + c - '0';
  }
  return res * neg;
}
}  // namespace t
const long long maxn = 1 << 20;
double l, r, x[20], y[20], a[20], dp[maxn];
int n;
double deal(double x0, int i) {
  double temp = atan((r - x[i]) / y[i]);
  temp = min(temp, atan((x0 - x[i]) / y[i]) + a[i]);
  return x[i] + y[i] * tan(temp);
}
int main() {
  while (~scanf("%d%lf%lf", &n, &l, &r)) {
    r -= l;
    for (int i = 0; i < n; i++) {
      scanf("%lf%lf%lf", &x[i], &y[i], &a[i]), x[i] -= l,
          a[i] = a[i] / 180. * acos(-1.0);
    }
    memset(dp, 0, sizeof(dp));
    int N = 1 << n;
    for (int i = 0; i < N; i++) {
      for (int j = 0; j < n; j++) {
        if ((i & (1 << j)) == 0) {
          dp[i ^ (1 << j)] = max(dp[i ^ (1 << j)], deal(dp[i], j));
        }
      }
    }
    printf("%.10f\n", dp[N - 1]);
  }
  return 0;
}
