← Home
package main

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

type Lamp struct {
	x, y, yy float64
	k        float64
	limit    float64
	a90      bool
}

func main() {
	in := bufio.NewReaderSize(os.Stdin, 1<<20)
	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer out.Flush()

	var n, lInt, rInt int
	if _, err := fmt.Fscan(in, &n, &lInt, &rInt); err != nil {
		return
	}

	lf := float64(lInt)
	rf := float64(rInt)

	if lf >= rf {
		fmt.Fprintf(out, "%.15f\n", 0.0)
		return
	}

	lamps := make([]Lamp, n)
	for i := 0; i < n; i++ {
		var xi, yi, ai int
		fmt.Fscan(in, &xi, &yi, &ai)
		x := float64(xi)
		y := float64(yi)
		if ai == 90 {
			lamps[i] = Lamp{x: x, y: y, yy: y * y, limit: x, a90: true}
		} else {
			k := math.Tan(math.Pi * float64(ai) / 180.0)
			lamps[i] = Lamp{x: x, y: y, yy: y * y, k: k, limit: x + y/k}
		}
	}

	size := 1 << n
	dp := make([]float64, size)
	const neg = -1e300
	for i := 1; i < size; i++ {
		dp[i] = neg
	}
	dp[0] = lf

	const eps = 1e-12
	best := lf

	for mask := 0; mask < size; mask++ {
		cur := dp[mask]
		if cur < neg/2 {
			continue
		}
		if cur > best {
			best = cur
		}
		if cur >= rf-eps {
			fmt.Fprintf(out, "%.15f\n", rf-lf)
			return
		}

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

			lamp := lamps[i]
			var nv float64

			if lamp.a90 {
				if cur >= lamp.limit-eps {
					nv = rf
				} else {
					nv = lamp.x + lamp.yy/(lamp.x-cur)
					if nv > rf {
						nv = rf
					}
					if nv < cur {
						nv = cur
					}
				}
			} else {
				if cur >= lamp.limit-eps {
					nv = rf
				} else {
					s := (cur - lamp.x) / lamp.y
					denom := 1.0 - s*lamp.k
					if denom <= eps {
						nv = rf
					} else {
						nv = lamp.x + lamp.y*(s+lamp.k)/denom
						if nv > rf {
							nv = rf
						}
						if nv < cur {
							nv = cur
						}
					}
				}
			}

			if nv >= rf-eps {
				fmt.Fprintf(out, "%.15f\n", rf-lf)
				return
			}

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

	if best < lf {
		best = lf
	}
	if best > rf {
		best = rf
	}

	fmt.Fprintf(out, "%.15f\n", best-lf)
}