Dawid has four bags of candies. The i-th of them contains a_i candies. Also, Dawid has two friends. He wants to give each bag to one of his two friends. Is it possible to distribute the bags in such a way that each friend receives the same amount of candies in total?

Note, that you can't keep bags for yourself or throw them away, each bag should be given to one of the friends.

Input

The only line contains four integers a_1, a_2, a_3 and a_4 (1 ≤ a_i ≤ 100) — the numbers of candies in each bag.

Output

Output YES if it's possible to give the bags to Dawid's friends so that both friends receive the same amount of candies, or NO otherwise. Each character can be printed in any case (either uppercase or lowercase).

Examples

Input


1 7 11 5


Output


YES


Input


7 3 2 5


Output


NO

Note

In the first sample test, Dawid can give the first and the third bag to the first friend, and the second and the fourth bag to the second friend. This way, each friend will receive 12 candies.

In the second sample test, it's impossible to distribute the bags.
import java.util.*;

public class DawidAndBagsOfCandies{
  public static void main(String[] args){
    Scanner gd = new Scanner(System.in);
    int tt = 1;
    while(tt>0){
      int sum = 0;
      int[] arr = IO.rai(4);
      Arrays.sort(arr);
      boolean flag = false;
      if(arr[0]+arr[1]==arr[2]+arr[3]){
        flag = true;
      }
      else if(arr[0]+arr[2]==arr[1]+arr[3]){
        flag = true;
      }
      else if(arr[0]+arr[3]==arr[1]+arr[2]){
        flag = true;
      }
      else if(arr[0]+arr[1]+arr[2]==arr[3]){
        flag = true;
      }
      if(flag){
        IO.pl("YES");
      }
      else{
        IO.pl("NO");
      }
      tt--;
    }
  }
}

// Template
class IO{
  static Scanner gd = new Scanner(System.in);
  public static long rl(){
    return gd.nextLong();
  }
  public static int ri(){
    return gd.nextInt();
  }
  public static String rs(){
    return gd.next();
  }
  public static int[] rai(int len){
    int[] temp = new int[len];
    for(int i=0;i<len;i++){
      temp[i] = gd.nextInt();
    }
    return temp;
  }
  public static long[] ral(int len){
    long[] temp = new long[len];
    for(int i=0;i<len;i++){
      temp[i] = gd.nextLong();
    }
    return temp;
  }
  public static String[] ras(int len){
    String[] temp = new String[len];
    for(int i=0;i<len;i++){
      temp[i] = gd.next();
    }
    return temp;
  }
  public static void pf(String format,Object... args){
    System.out.printf(format,args);
  }
  public static void pl(Object data){
    System.out.println(data);
  }
  public static void pai(int arr[]){
    for(int i=0;i<arr.length;i++){
      System.out.printf("%d ",arr[i]);
    }
    System.out.println();
  }
  public static void pal(long arr[]){
    for(int i=0;i<arr.length;i++){
      System.out.printf("%d ",arr[i]);
    }
    System.out.println();
  }
  public static void pas(String arr[]){
    for(int i=0;i<arr.length;i++){
      System.out.printf("%s ",arr[i]);
    }
    System.out.println();
  }
}

class UT{
  public static long fact(long k){
    if(k==1){
      return 1;
    }
    else{
      return k*fact(k-1);
    }
  }
  public static HashMap<Integer,Integer> gen_primes(int upper_bound){
    int[] arr = new int[upper_bound];
    int ptr = 0;
    boolean flag;
    int next_ptr=1;
    for(int i=0;i<upper_bound;i++){
      arr[i] = i+2;
    }
    while(next_ptr!=0){
      flag = true;
      next_ptr = 0;
      for(int j=ptr+1;j<arr.length;j++){
        if(((arr[ptr]*arr[ptr])>upper_bound)){
          break;
        }
        if(arr[j]!=0&&flag==true){
          flag = false;
          next_ptr = j;
        }
        if(arr[j]%arr[ptr]==0){
          arr[j] = 0;
        }
      }
      ptr = next_ptr;
    }
    HashMap<Integer,Integer> prime_nums = new HashMap<Integer,Integer>();
    for(int p=0;p<arr.length;p++){
      if(arr[p]!=0){
        prime_nums.put(arr[p],arr[p]);
      }
    }
    return prime_nums;
  }
}


