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
42
43
44
45
46
47
48
#include <algorithm>
#include <cstdio>
#include <utility>
#include <vector>
using namespace std;

#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define FORD(i,a,b) for(int i=(b)-1;i>=(a);--i)
#define REP(i,n) FOR(i,0,n)
#define REPD(i,n) FORD(i,0,n)
#define PB push_back
#define ALL(c) (c).begin(),(c).end()
#define MP make_pair
#define FT first
#define SD second
#define INT(x) int x; scanf("%d", &x)

typedef pair<int,int> PII;
typedef vector<PII> VII;

int a[50000], r[50000];

int main() {
	INT(n);
	INT(m);
	REP(i,n) scanf("%d", &a[i]);
	REPD(i,n) {
		VII v;
		FOR(j,i+1,n) v.PB(MP(r[j] >= 0 ? r[j] + a[j] : 0, -j));
		sort(ALL(v));
		int w = n - i - 1;
		int h = w >> 1;
		int s = 0;
		REP(j,h) s += v[j].FT;
		if (s > m) {
			r[i] = -1;
			continue;
		}
		REP(j,h) r[-v[j].SD] = v[j].FT;
		FOR(j,h,w) r[-v[j].SD] = 0;
		r[i] = m - s;
	}
	REP(i,n) {
		if (i) printf(" ");
		printf("%d", r[i]);
	}
	printf("\n");
}