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.*;
public class B319
{
static int m,n;
static int ar[];
public static void main(String args[]) throws IOException
{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String s[]=br.readLine().split(" ");
n=Integer.parseInt(s[0]);
m=Integer.parseInt(s[1]);
if(n>m)
{
System.out.println("YES");
return;
}
long sum=0;
int i;
ar=new int[n];
String s2[]=br.readLine().split(" ");

for(i=0;i<n;i++)
{
ar[i]=Integer.parseInt(s2[i]);
if(ar[i]==0)
{
System.out.println("YES");
return;
}
sum+=ar[i];
}
if(sum%m==0)
{
System.out.println("YES");
return;
}
if(dp(n-1,0,false))
{
System.out.println("YES");
}
else
System.out.println("NO");
}
static HashMap<Pair,Boolean> mp=new HashMap<Pair,Boolean>();
static boolean dp(int ind,int sum,boolean taken)
{
if(taken && sum%m==0)
return true;

Pair p=new Pair(ind,sum);
if(mp.containsKey(p))
return mp.get(p);
if(ind<0)
return false;

mp.put(p,(dp(ind-1,(sum+ar[ind])%m,true) || dp(ind-1,sum,taken)));
return (mp.get(p));
}

static class Pair
{
int x;
int y;
Pair(int a,int b)
{
x=a;
y=b;
}
@Override
    public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + x;
    result = prime * result + y;
    return result;
    }

    @Override
    public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    Pair other = (Pair) obj;
    if (x != other.x)
        return false;
    if (y != other.y)
        return false;
    return true;
}
}
}
