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

//893D
//Credit Card

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

public class D
{

	public static void main(String[] args) throws IOException
	{
		Scanner sc = new Scanner(System.in);
		PrintWriter pw = new PrintWriter(System.out);
		int n = sc.nextInt();
        int d = sc.nextInt();
        ArrayList<Integer> arr = new ArrayList<>();
        int[] maxBalance = new int[n];

        for(int i = 0; i < n; i++)
        {
            int tmp = sc.nextInt();
            if(tmp == 0 && arr.size() > 0)
            {
                int pre = arr.get(arr.size() - 1);
                if(pre == 0) continue;
                arr.add(tmp);
            }
            else arr.add(tmp);

        }

        int zero = 0;
        int balance = 0;
        int max = 0;
        for(int i = 0; i < arr.size(); i++)
        {
            int tmp = arr.get(i);
            if(tmp == 0)
            {
                if(zero > 0)
                    maxBalance[zero - 1] = max;
                balance = 0;
                max = 0;
                zero++;
            }

            balance += arr.get(i);
            max = Math.max(max, balance);
        }

        if(zero > 0 && maxBalance[zero - 1] == 0)
            maxBalance[zero - 1] = max;

        maxBalance = Arrays.copyOf(maxBalance, zero + 1);

        for(int i = maxBalance.length - 2; i > -1; i--)
            maxBalance[i] += maxBalance[i + 1];

        zero = 0;
        int count = 0;
        long account = 0;
		for(int i = 0; i < arr.size(); i++)
		{
			int tmp = arr.get(i);
			
			if(tmp == 0)
			{
                if(account < 0)
                {
                    if(maxBalance[zero] <= 0) account = d;
                    else
                    {
                        for(int j = zero + 1; j < maxBalance.length; j++)
                            if(maxBalance[zero] - maxBalance[j] <= d)
                                account = d - (maxBalance[zero] - maxBalance[j]);
                            else break;

                        if(account < 0) account = 0;
                    }
                    // pw.println(maxBalance[zero] + " " + zero + " " + account);
                    count++;
                }
				zero++;
			}
			else if(tmp > 0)
			{
				if(account + tmp > d)
				{
                    count = -1;
                    // pw.println(zero + " " + account + " " + tmp);
					break;
				}		
				account += tmp;
			}
			else if(tmp < 0)
				account += tmp;
				
		}
		
		pw.println(count);
		pw.flush();
		pw.close();
	}

	static class Scanner 
    {
        StringTokenizer st;
        BufferedReader br;

        public Scanner(InputStream s){	br = new BufferedReader(new InputStreamReader(s));}

        public String next() throws IOException 
        {
            while (st == null || !st.hasMoreTokens()) 
                st = new StringTokenizer(br.readLine());
            return st.nextToken();
        }

        public int nextInt() throws IOException {return Integer.parseInt(next());}
        
        public long nextLong() throws IOException {return Long.parseLong(next());}

        public String nextLine() throws IOException {return br.readLine();}
        
        public double nextDouble() throws IOException
        {
            String x = next();
            StringBuilder sb = new StringBuilder("0");
            double res = 0, f = 1;
            boolean dec = false, neg = false;
            int start = 0;
            if(x.charAt(0) == '-')
            {
                neg = true;
                start++;
            }
            for(int i = start; i < x.length(); i++)
                if(x.charAt(i) == '.')
                {
                    res = Long.parseLong(sb.toString());
                    sb = new StringBuilder("0");
                    dec = true;
                }
                else
                {
                    sb.append(x.charAt(i));
                    if(dec)
                        f *= 10;
                }
            res += Long.parseLong(sb.toString()) / f;
            return res * (neg?-1:1);
        }
        
        public boolean ready() throws IOException {return br.ready();}

    }
}

