You are given a sequence of numbers a1, a2, ..., an, and a number m.

Check if it is possible to choose a non-empty subsequence aij such that the sum of numbers in this subsequence is divisible by m.

Input

The first line contains two numbers, n and m (1 ≤ n ≤ 106, 2 ≤ m ≤ 103) — the size of the original sequence and the number such that sum should be divisible by it.

The second line contains n integers a1, a2, ..., an (0 ≤ ai ≤ 109).

Output

In the single line print either "YES" (without the quotes) if there exists the sought subsequence, or "NO" (without the quotes), if such subsequence doesn't exist.

Examples

Input

3 5
1 2 3


Output

YES


Input

1 6
5


Output

NO


Input

4 6
3 1 1 3


Output

YES


Input

6 6
5 5 5 5 5 5


Output

YES

Note

In the first sample test you can choose numbers 2 and 3, the sum of which is divisible by 5.

In the second sample test the single non-empty subsequence of numbers is a single number 5. Number 5 is not divisible by 6, that is, the sought subsequence doesn't exist.

In the third sample test you need to choose two numbers 3 on the ends.

In the fourth sample test you can take the whole subsequence.
import java.io.*;
import java.util.*;
import java.lang.*;
import java.math.*;

public class cf {
    public static void main(String[] args) {
        try {
            InputStream inputStream=System.in;
            OutputStream outputStream=System.out;
            //InputStream inputStream=new FileInputStream("paint.in");
            //OutputStream outputStream=new FileOutputStream("paint.out");
            InputReader in=new InputReader(inputStream);
            PrintWriter out=new PrintWriter(outputStream);
            Task task=new Task();
            task.run(in,out);
            out.close();
        } catch (Exception e) {
            if (e instanceof FileNotFoundException) {System.out.print("File not found.");}
            else {e.printStackTrace();}
        }
    }
}

class InputReader {
    private BufferedReader br;
    private StringTokenizer st;
    public InputReader(InputStream stream) {
        br=new BufferedReader(new InputStreamReader(stream),32768);
        st=null;
    }
    public String next() {
        while (st==null || !st.hasMoreTokens()) {
            try {
                st=new StringTokenizer(br.readLine());
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
        return st.nextToken();
    }
    public int nextInt() {return Integer.parseInt(next());}
    public long nextLong() {return Long.parseLong(next());}
    public double nextDouble() {return Double.parseDouble(next());}
    public int[] nextIntArray(int n) {
        int[] a=new int[n];
        for (int i=0;i<n;i++) {a[i]=nextInt();}
        return a;
    }
    public long[] nextLongArray(int n) {
        long[] a=new long[n];
        for (int i=0;i<n;i++) {a[i]=nextLong();}
        return a;
    }
}

class Utils {
    public static void shuffleint(int[] a) {
        int n=a.length,tmp,pi;
        Random r=new Random();
        for (int i=0;i<n;++i) {
            tmp=a[i];
            pi=i+r.nextInt(n-i);
            a[i]=a[pi];
            a[pi]=tmp;
        }
    }
    public static void shufflelong(long[] a) {
        int n=a.length,pi;
        long tmp;
        Random r=new Random();
        for (int i=0;i<n;++i) {
            tmp=a[i];
            pi=i+r.nextInt(n-i);
            a[i]=a[pi];
            a[pi]=tmp;
        }
    }
    public static void sortint(int[] a) {
        shuffleint(a);
        Arrays.sort(a);
    }
    public static void sortlong(long[] a) {
        shufflelong(a);
        Arrays.sort(a);
    }
}

class Task {
    public void run(InputReader in,PrintWriter out) {
	    int n=in.nextInt(),m=in.nextInt(),foo;
    	int[] a=in.nextIntArray(n),b=new int[m];
    	List<Integer> c=new ArrayList<Integer>();
    	b[a[0]%m]=1;
    	c.add(0);
    	c.add(a[0]%m);
    	for (int i=1;i<n;i++) {
    		int s=c.size();
    		for (int j=0;j<s;j++) {
    			foo=(a[i]+c.get(j))%m;
    			if (b[foo]==0) {
    				b[foo]=1;
            		c.add(foo);
    			}
    		}
    		if (b[0]==1) {
        		break;
        	}
    	}
    	if (b[0]==1) {
    		out.print("YES");
    	}
    	else {
    		out.print("NO");
    	}
    }
}