← Home
package main

import (
	"bufio"
	"fmt"
	"math"
	"os"
)

type Light struct {
	x, y float64
	q    float64
	is90 bool
}

func main() {
	in := bufio.NewReaderSize(os.Stdin, 1<<20)

	var n int
	var l, r int
	fmt.Fscan(in, &n, &l, &r)

	lights := make([]Light, n)
	for i := 0; i < n; i++ {
		var x, y, a int
		fmt.Fscan(in, &x, &y, &a)
		lights[i].x = float64(x)
		lights[i].y = float64(y)
		if a == 90 {
			lights[i].is90 = true
		} else {
			lights[i].q = math.Tan(float64(a) * math.Pi / 180.0)
		}
	}

	L := float64(l)
	R := float64(r)

	m := 1 << n
	dp := make([]float64, m)
	negInf := -1e300
	for i := 1; i < m; i++ {
		dp[i] = negInf
	}
	dp[0] = L

	ans := L

	for mask := 0; mask < m; mask++ {
		p := dp[mask]
		if p == negInf {
			continue
		}
		if p > ans {
			ans = p
		}
		if p >= R {
			continue
		}

		for i := 0; i < n; i++ {
			if mask&(1<<i) != 0 {
				continue
			}

			lt := lights[i]
			var v float64

			if lt.is90 {
				if p >= lt.x {
					v = R
				} else {
					v = lt.x - lt.y*lt.y/(p-lt.x)
					if v > R {
						v = R
					}
				}
			} else {
				t := (p - lt.x) / lt.y
				den := 1.0 - t*lt.q
				if den <= 0 {
					v = R
				} else {
					v = lt.x + lt.y*(t+lt.q)/den
					if v > R {
						v = R
					}
				}
			}

			nmask := mask | (1 << i)
			if v > dp[nmask] {
				dp[nmask] = v
			}
		}
	}

	if ans > R {
		ans = R
	}

	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	fmt.Fprintf(out, "%.15f\n", ans-L)
	out.Flush()
}