책장 병목
면접 대비시간 제한3초메모리 제한1024 MB
각 책을 세로 길이가 H 이하가 되도록 회전할 때, n권의 책을 한 줄로 놓는 데 필요한 최소 선반 너비를 구합니다.
문제
브리안나는 책벌레다. 집에는 추리소설과 공상과학 소설부터 전기까지 좋아하는 책을 모두 꽂아 둔 큰 책장이 있다.
최근 그녀는 그래픽 노블 권을 컬렉션에 더했다. 새 책들은 방 여기저기 바닥에 놓여 큰 더미를 이루고 있다. 한편 선반 판 하나에는 먼지가 쌓여 있고, 그곳에 어울리지 않는 생활용품들도 놓여 있다. 바닥에 흩어진 책이 감당하기 어려울 만큼 늘어나서, 브리안나는 이 책들을 그 선반 판에 올리기로 했다. 그러려면 먼저 선반에 자리를 비워야 한다.

그림 B.1: 세 번째 입력을 시각화한 그림.
브리안나는 책을 쌓지 않고 한 줄로 나란히 놓으려 한다. 선반은 책을 모두 올릴 만큼 넓지만, 자리를 비우는 데 시간이 든다. 그래서 비워야 하는 선반 부분의 너비를 최소로 줄이고 싶어 한다.
각 책은 세 변의 길이가 , , 인 직육면체다. 선반 위 공간은 바로 위의 선반 판에 막혀 있으므로, 책의 세로 길이가 두 선반 판 사이의 거리 이하일 때만 세워 둘 수 있다. 브리안나는 각 책을 3차원 공간에서 원하는 대로 회전시킬 수 있다. 어떤 방향으로 놓아도 책이 떨어지지 않을 만큼 선반은 충분히 깊다고 보장된다. 다만 모든 책은 선반 판에 면 전체가 닿아 똑바로 서 있어야 하며, 모서리만 닿아서는 안 된다.
책들을 놓는 데 필요한 선반의 최소 너비는 얼마인가?
입력
입력은 다음과 같다.
첫 줄에 책의 개수 과 선반의 높이 가 정수로 주어진다(, ).
이어서 개의 줄에 각각 세 정수 , , ()가 주어지며, 이는 책 한 권의 크기다.
출력
책들을 놓는 데 필요한 선반의 최소 너비를 출력한다. 책을 선반에 놓는 것이 불가능하면 impossible을 출력한다.