만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

시원하게 유지하기

시간 제한2초메모리 제한512 MB

요약
냉장고의 s개 칸에 새 음료 n개를 나눠 넣어, 다음 m명이 모두 시원한 음료를 뽑을 확률을 최대로 만드는 배치를 찾습니다.
난이도

보통10점 중 6점

유형
동적 계획법, 조합론, 확률
정답자
아직 제출이 없습니다

문제

학기 과제가 몰리면서 연구실 냉장고에 음료수를 다시 채워야 합니다. 냉장고에는 ss개의 칸이 있고, 각 칸에는 음료수를 dd병까지 넣을 수 있습니다. 새로 넣을 음료수는 nn병입니다. 냉장고에 이미 있는 음료수는 시원하지만, 새 음료수는 시원하지 않습니다. 마시기 좋은 온도가 되려면 냉장고에서 한동안 식혀야 합니다.

냉장고는 앞쪽에서만 채울 수 있습니다. 이상적인 상황이라면 지금 들어 있는 음료수를 모두 꺼낸 뒤 새 nn병을 넣고, 그다음에 시원한 예전 음료수를 새 음료수 앞에 둘 것입니다. 하지만 시험 두 개와 과제 마감이 다가와서 그렇게 할 시간이 없습니다.

그래서 새 음료수를 냉장고 앞쪽에 넣고 잘 되기를 바랄 것입니다. 다만 새 음료수를 어느 칸에 넣을지는 신중하게 고를 수 있습니다. 학생이 음료수를 가져갈 때마다, 비어 있지 않은 칸 중에서 균등한 확률로 무작위로 고른 칸의 앞쪽에서 한 병을 가져갑니다. 다음 mm명의 학생이 모두 시원한 음료수를 받을 확률이 최대가 되도록 새 음료수를 어디에 넣을지 정하세요.

입력

첫 번째 줄에 정수 네 개 nn, mm, ss, dd가 주어집니다(1≤n,m,s,d≤1001 \le n, m, s, d \le 100). 각각 새 음료수의 개수, 최적화 대상이 되는 학생 수, 칸의 개수, 칸마다의 용량입니다. 두 번째 줄에는 정수 ss개 c1,…,csc_1, \ldots, c_s가 주어집니다(0≤ci≤d0 \le c_i \le d). cic_i는 현재 ii번째 칸에 들어 있는 음료수의 개수입니다.

냉장고에 새 nn병을 모두 넣을 빈 공간이 있다고 가정해도 됩니다.

출력

다음 mm명의 학생이 모두 시원한 음료수를 받을 가능성이 있으면, 그 확률을 최대로 만드는 nn병의 補충 방법을 나타내는 정수 ss개를 출력합니다. ii번째 정수는 ii번째 칸의 앞쪽에 넣는 새 음료수의 개수입니다. 최적의 방법이 여러 개면 그중 아무거나 출력해도 됩니다. 다음 mm명의 학생이 모두 시원한 음료수를 받는 것이 불가능하면 "impossible"을 출력합니다.

예제2

  1. 예제 1

    입력
    5 3 3 4
    0 1 4
    
    예상 출력
    2 3 0
    
  2. 예제 2

    입력
    2 7 6 4
    0 1 2 2 0 1
    
    예상 출력
    impossible