집수리
시간 제한1초메모리 제한1024 MB
필요한 못을 가지고 있는 더 길거나 같은 못에 배정하거나 새로 사야 하며, 사는 못의 개수를 먼저, 그다음 총 길이를 최소화한다.
문제
Johanna는 자기 아파트에서 집수리를 하고 있다. Johanna는 우연에 맡기는 것을 좋아하지 않아서, 집수리 중에 필요한 못의 개수를 정확히 미리 계획했다. 그녀는 총 개의 못이 필요하며, 길이는 이다. 그녀의 못 상자에는 길이가 인 개의 못이 있다.
Johanna가 길이 인 못이 필요할 때, 이면 길이 인 못을 사용할 수 있다. 더 긴 못을 필요한 길이가 될 때까지 잘라낼 수 있기 때문이다. 그러나 짧은 못 두 개를 합쳐 긴 못을 만들 수는 없고, 못 하나를 여러 번 자를 수도 없다. 못 머리는 하나뿐이기 때문이다.
집수리를 시작하기 전에 Johanna는 다음을 알고 싶어 한다.
- 못을 몇 개 사야 하는지, 그리고
- 사야 하는 못의 길이가 각각 얼마인지.
그녀는 가능한 한 적은 수의 못을 사고 싶어 하며, 더해서 사는 못의 총 길이도 가능한 한 짧기를 원한다.
입력
첫째 줄에 두 정수 와 가 주어진다. 이는 Johanna가 필요한 못의 개수와 Johanna가 가진 못의 개수이다. 둘째 줄에 개의 정수 이 주어지며, 이는 Johanna가 필요한 못의 길이이다. 셋째 줄에 개의 정수 이 주어지며, 이는 Johanna가 가진 못의 길이이다.
출력
프로그램은 먼저 정수 하나를 출력한다. 이는 Johanna가 사야 하는 못의 최소 개수이다. 다음 줄에는 Johanna가 사야 하는 못의 길이를 오름차순으로 출력한다.
힌트
예제 1에서 Johanna는 길이가 , , 인 못 세 개만 더 채우면 된다.
예제 2에서 Johanna는 길이 인 못을 하나 더 사야 하고, 길이 인 못을 으로 잘라야 한다. 길이 인 못을 사고 길이 인 못을 길이 로 자를 수도 있지만, 그러면 더 긴 총 길이의 못을 사야 한다.