1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import sys

def podzial_piratow(n, m, chciwosc):
    wyniki = [-1] * n  # Inicjalizacja wyników (-1 oznacza wyrzucenie za burtę)
    
    aktywni_piraci = list(range(n))  # Lista aktywnych piratów (ci, którzy jeszcze nie zostali wyrzuceni)
    while aktywni_piraci:
        i = aktywni_piraci[0]  # Pierwszy pirat w hierarchii
        dostepne_monety = m
        propozycja = [0] * n
        propozycja[i] = dostepne_monety  # Domyślnie pirat chce wszystko dla siebie
        
        # Sprawdzenie, czy może przekonać innych piratów
        glosy_za = 1  # Sam na siebie głosuje
        pozostali_piraci = aktywni_piraci[1:]
        
        for j in reversed(pozostali_piraci):
            potrzebne_monety = chciwosc[j]
            if dostepne_monety >= potrzebne_monety:
                propozycja[j] = potrzebne_monety
                dostepne_monety -= potrzebne_monety
                glosy_za += 1
                if glosy_za >= (len(aktywni_piraci) + 1) // 2:
                    break
        
        if glosy_za >= (len(aktywni_piraci) + 1) // 2:
            for j in aktywni_piraci:
                wyniki[j] = propozycja[j]
            break
        else:
            aktywni_piraci.pop(0)  # Pirat zostaje wyrzucony za burtę
    
    return wyniki

if __name__ == "__main__":
    # Wczytywanie wejścia
    n, m = map(int, sys.stdin.readline().split())
    chciwosc = list(map(int, sys.stdin.readline().split()))
    
    # Obliczanie i wypisywanie wyników
    print(" ".join(map(str, podzial_piratow(n, m, chciwosc))))