9 13
6 14 19 5 -5 6 -10 20 8
 8 9
6 -1 5 -5 -8 -7 -8 -7
 10 7
-9 3 -4 -22 4 -17 0 -14 3 -2
 6 2
-2 3 0 -2 0 0
 5 10
-8 -24 0 -22 12
 5 13756
-2 -9 -10 0 10
 7 3
1 -3 0 3 -1 0 2
 9 9
-3 2 0 -2 -7 -1 0 5 3
 2 3
2 0
 19 78701
1 0 -1 0 -1 -1 0 1 0 -1 1 1 -1 1 0 0 -1 0 0
 5 4
-1 0 0 1 -1
 6 4
-1 0 2 -4 0 5
 20 23036
-1 1 -1 -1 -1 -1 1 -1 -1 0 0 1 1 0 0 1 0 0 -1 -1
 5 4
-1 0 -3 0 3
 12 82016
1 -2 -1 -1 -2 -1 0 -2 -1 1 -2 2
 7 4
-6 0 2 -3 0 4 0
 4 4
2 2 0 1
 6 1
-3 0 0 0 -2 3
 8 26
-4 9 -14 -11 0 7 23 -15
 20 23079
0 1 1 -1 1 0 -1 -1 0 0 1 -1 1 1 1 0 0 1 0 1
 1 1
1
 7 8555
-2 -3 -2 3 0 -2 0
 4 100
-100 0 -50 100
 3 14
12 12 -8
 1 1
2
 10 23
9 7 14 16 -13 -22 24 -3 -12 14
 8 11
12 -12 -9 3 -22 -21 1 3
 19 49926
-2 0 2 0 0 -2 2 -1 -1 0 0 0 1 0 1 1 -2 2 2
 16 76798
-1 11 -7 -4 0 -11 -12 3 0 -7 6 -4 8 6 5 -10
 9 5
-2 0 3 -4 0 4 -3 -2 0

-1
 -1
 1
 1
 1
 1
 -1
 2
 0
 1
 1
 -1
 1
 1
 1
 1
 -1
 1
 -1
 0
 0
 1
 1
 -1
 -1
 -1
 -1
 1
 1
 1

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

public class D {
    DeluxeScanner in = new DeluxeScanner(null);
    PrintWriter out = new PrintWriter(new BufferedOutputStream(System.out), true);


    void run() {
        int n = in.nextInt();
        int d = in.nextInt();
        int[] a = in.nextIntArray(n);
        int cnt = 0;
        long low = 0, high = 0;
        for (int i = 0; i < n; i++) {
            if (a[i] != 0) {
                high = Math.min(high + a[i], d);
                low += a[i];
                if (low > high) {
                    out.print(-1);
                    out.close();
                    return;
                }
            }
            else {
                if (high >= 0) {
                    low = Math.max(0, low);
                }
                else {
                    cnt++;
                    high = d;
                    low = 0;
                }
            }
        }
        out.print(cnt);
        out.close();
    }

    public static void main(String[] args) {
        new D().run();
    }

    static class DeluxeScanner {
        BufferedReader br;
        StringTokenizer st;

        DeluxeScanner(String filename) {
            if (filename != null)
                try {
                    br = new BufferedReader(new FileReader(filename));
                }
                catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
            else
                br = new BufferedReader(new InputStreamReader(System.in));
        }

        String next() {
            while (st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        double nextDouble() {
            return Double.parseDouble(next());
        }

        int nextInt() {
            return Integer.parseInt(next());
        }

        long nextLong() {
            return Long.parseLong(next());
        }

        String nextLine() {
            String str = "";
            try {
                str = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return str;
        }

        char[] nextCharArray(int n) {
            char[] g = new char[n];
            g = next().toCharArray();
            return g;
        }

        char[][] nextChar2DArray(int n, int m) {
            char[][] g = new char[n][m];
            for (int i = 0; i < n; i++)
                g[i] = nextCharArray(m);
            return g;
        }

        double[] nextDoubleArray(int n) {
            double[] a = new double[n];
            for (int i = 0; i < n; i++)
                a[i] = nextDouble();
            return a;
        }

        double[][] nextDouble2DArray(int n, int m) {
            double[][] a = new double[n][m];
            for (int i = 0; i < n; i++)
                a[i] = nextDoubleArray(m);
            return a;
        }

        int[] nextIntArray(int n) {
            int[] a = new int[n];
            for (int i = 0; i < n; i++)
                a[i] = nextInt();
            return a;
        }

        int[][] nextInt2DArray(int n, int m) {
            int[][] a = new int[n][m];
            for (int i = 0; i < n; i++)
                a[i] = nextIntArray(m);
            return a;
        }

        long[] nextLongArray(int n) {
            long[] a = new long[n];
            for (int i = 0; i < n; i++)
                a[i] = nextLong();
            return a;
        }

        long[][] nextLong2DArray(int n, int m) {
            long[][] a = new long[n][m];
            for (int i = 0; i < n; i++)
                a[i] = nextLongArray(m);
            return a;
        }
    }

    static class Pair implements Comparable<Pair> {
        int first;
        int second;

        Pair (int first, int second) {
            this.first = first;
            this.second = second;
        }

        @Override
        public int compareTo (Pair pair) {
            if (this.first != pair.first)
                return this.first - pair.first;
            else
                return this.second - pair.second;
        }

        @Override
        public boolean equals(Object o) {
            if (!(o instanceof Pair))
                return false;
            Pair p = (Pair) o;
            return Objects.equals(p.first, first) && Objects.equals(p.second, second);
        }

        @Override
        public int hashCode() {
            return this.first  ^ this.second;
        }

        @Override
        public String toString() {
            return "" + '(' + this.first + ',' + this.second + ')';
        }
    }
}