import java.io.*;
import java.util.*;

public class expify_mb_first_log {
    private static int[] readLengths(int n, String line) {
        StringTokenizer st = new StringTokenizer(line);
        int[] rv = new int[n];
        for (int i = 0; i < n; ++i) {
            rv[i] = Integer.parseInt(st.nextToken());
        }
        return rv;
    }

    private static int next(long[] prefixSums, int position, int c) {
        int left = position;
        int right = prefixSums.length;
        long toFind = prefixSums[position] + c;
        while (right - left > 1) {
            int mid = (left + right) >>> 1;
            if (prefixSums[mid] < toFind) {
                left = mid;
            } else {
                right = mid;
            }
        }
        return right;
    }

    private static int[] solve(int[] d, int c) {
        int n = d.length;
        int n2 = n * 2;
        int ln = 1;
        while ((1 << ln) < n2) {
            ++ln;
        }

        long[] prefixSums = new long[n2];
        for (int i = 0; i + 1 < n2; ++i) {
            int value = i < n ? d[i] : d[i - n];
            prefixSums[i + 1] = value + prefixSums[i];
        }

        int[][] next = new int[ln][n2];
        int[] next0 = next[0];
        for (int i = 0; i < n2; ++i) {
            next0[i] = next(prefixSums, i, c);
        }
        for (int level = 1; level < ln; ++level) {
            int[] nextX = next[level - 1];
            int[] nextY = next[level];
            for (int i = 0; i < n2; ++i) {
                int xi = nextX[i];
                nextY[i] = xi == n2 ? n2 : nextX[xi];
            }
        }

        int[] result = new int[n];
        for (int i = 0; i < n; ++i) {
            int target = i + n;
            int curr = i;
            int answer = 0;
            for (int level = ln - 1; curr < target && level > 0; --level) {
                while (next[level][curr] < target) {
                    answer += 1 << level;
                    curr = next[level][curr];
                }
            }
            while (curr < target) {
                ++answer;
                curr = next[0][curr];
            }
            result[i] = answer - 1;
        }
        return result;
    }

    private static void write(PrintWriter out, int[] answer) {
        int n = answer.length;
        for (int i = 0; i < n; ++i) {
            out.print(answer[i]);
            if (i + 1 < n) {
                out.print(' ');
            } else {
                out.println();
            }
        }
    }

    public static void main(String[] args) throws IOException {
        try (BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
             PrintWriter out = new PrintWriter(System.out)) {
            StringTokenizer header = new StringTokenizer(in.readLine());
            int n = Integer.parseInt(header.nextToken());
            int c = Integer.parseInt(header.nextToken());
            int[] d = readLengths(n, in.readLine());
            int[] answer = solve(d, c);
            write(out, answer);
        }
    }
}
