주방 계량
시간 제한3초메모리 제한256 MB
용량이 다른 컵들끼리 따르면서 옮긴 양의 합을 최소화해 가장 큰 컵에 정확히 V만큼 남기고, 불가능하면 impossible을 출력합니다.
문제
요리법을 따라 액체의 부피를 정확히 재려고 한다. 부엌에는 크기가 서로 다른 컵이 여러 개 있지만 어느 컵에도 전체 용량 말고는 눈금이 없고, 원하는 부피와 용량이 같은 컵도 없다. 가장 큰 컵을 가득 채운 상태에서 시작한다. 각 시점에 컵마다 얼마가 담겨 있는지 정확히 알기 위해, 액체가 남아 있는 컵에서 다른 컵으로 붓는 동작만 쓴다. 한 번 붓기 시작하면 받는 컵이 가득 차거나 붓는 컵이 빌 때까지, 둘 중 먼저 일어나는 쪽까지 붓는다.
간단한 예로 용량 인 컵이 가득 찬 채로 시작하고 용량 인 컵이 하나 더 있으며, 가장 큰 컵에 을 남기는 것이 목표라고 하자. 큰 컵에서 작은 컵으로 부으면 작은 컵이 용량 를 채우는 순간 멈추고, 큰 컵에는 정확히 이 남는다. 그림 1(a)를 보자.

그림 1: 컵 사이에서 붓기
두 번째 예로 용량이 , , , 인 컵 네 개가 있고, 가장 큰 컵만 가득 찬 상태에서 시작해 가장 큰 컵에 을 남기는 것이 목표라고 하자. 편의상 용량 인 컵을 9컵이라 부르고 나머지도 같은 방식으로 부른다. 6컵과 2컵의 용량을 합하면 이므로, 9컵에서 두 컵을 모두 채운 뒤 9컵에 남은 을 3컵에 비우고, 가득 찬 6컵과 2컵을 9컵으로 되돌리면 된다. 그림 1(b)를 보자. 이 방법으로 부은 총량은 이다. 같은 목표를 다른 방법으로도 이룰 수 있다. 9컵에서 3컵으로 을 부어 9컵에 을 남기고, 3컵에서 2컵을 채워 3컵에 을 남긴 다음, 가득 찬 2컵을 9컵으로 되돌리면 9컵에 정확히 이 담긴다. 이때 부은 총량은 뿐이다. 그림 1(c)를 보자.
마지막 예로 용량이 , , , , 인 컵이 있고 11컵만 가득 찬 상태에서 시작해 11컵에 을 남기는 것이 목표라고 하자. 10컵을 채우고 11컵에 남은 을 다른 컵에 비운 뒤 가득 찬 10컵을 11컵으로 되돌리면 된다. 그림 2(a)가 이 방법이다. 이 세 번의 붓기로 옮긴 총량은 이다. 그림 2(b)는 붓는 횟수는 더 많지만 옮긴 액체의 양은 더 적은 순서를 보여 준다.

그림 2: 더 많은 붓기
입력
입력은 양의 정수로 이루어진 한 줄이다.
컵은 개이고 이며, 용량은 을 만족한다. 은 목표 부피다. 용량 인 가장 큰 컵은 가득 찬 채로, 나머지 컵은 빈 채로 시작하며, 가장 큰 컵에 정확히 만큼 담는 것이 목표다.
출력
목표를 이루기 위해 부어야 하는 액체의 최소 총량을 출력한다. 목표를 이룰 수 없으면 impossible을 출력한다.