44 58 90 53
 20 14 37 71
 4 2 4 2
 1 2 5 5
 1 2 8 9
 99 100 3 98
 92 69 83 97
 3 1 1 1
 18 88 18 18
 1 1 1 1
 69 7 44 30
 90 30 30 30
 1 2 3 5
 1 1 3 1
 6 3 6 6
 26 52 7 19
 6 4 8 6
 10 2 3 5
 34 11 84 39
 1 1 14 12
 3 2 1 1
 2 4 6 6
 1 1 2 1
 72 96 2 26
 97 95 91 27
 1 2 1 3
 1 1 2 3
 1 1 1 2
 1 1 10 20
 2 3 2 5
 1 2 10 7
 2 1 28 9
 4 4 4 8
 2 2 4 6
 72 52 62 62
 76 97 99 74
 100 100 99 100
 30 74 41 63
 5 10 1 6
 18 17 17 20
 2 4 1 1
 7 3 6 3
 1 1 4 5
 2 2 6 2
 1 2 6 3
 3 5 1 3
 70 100 10 86
 48 14 3 31
 2 6 3 2
 2 3 10 10
 4 4 12 4
 14 9 10 6
 100 98 99 97
 5 7 1 3
 1 1 4 2
 14 10 18 24
 1 100 100 1
 1 2 4 5
 1 2 3 4
 1 2 3 3
 4 4 4 5
 66 68 16 82
 1 2 3 2
 2 3 3 4
 100 100 100 100
 1 2 2 7
 3 14 36 53
 1 1 3 4

NO
 YES
 YES
 NO
 YES
 NO
 NO
 YES
 NO
 YES
 NO
 YES
 NO
 YES
 NO
 YES
 YES
 YES
 YES
 YES
 NO
 NO
 NO
 YES
 NO
 NO
 NO
 NO
 NO
 NO
 YES
 NO
 NO
 NO
 YES
 YES
 NO
 YES
 YES
 NO
 YES
 NO
 NO
 YES
 YES
 YES
 NO
 YES
 NO
 NO
 YES
 NO
 YES
 YES
 YES
 NO
 YES
 YES
 YES
 NO
 NO
 NO
 YES
 YES
 YES
 NO
 YES
 NO

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;
  }
}


