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.*;
import java.io.*;
import java.math.*;
public class A588{

	public static void main(String args[]){
		FastReader sc = new FastReader();
		int a[]=new int[4],i;
		int sum=0;
		for(i=0;i<4;i++){
			a[i]=sc.nextInt();
			sum+=a[i];
		}
		Arrays.sort(a);
		if((sum-a[3])==(a[3])||((sum-a[3]-a[0])==(a[3]+a[0])))
			out.println("YES");
		else 
			out.println("NO");
		out.flush();
	}

	static PrintWriter out;
	static class FastReader{
		BufferedReader br;
		StringTokenizer st;
		public FastReader(){
			br=new BufferedReader(new InputStreamReader(System.in));
			out=new PrintWriter(System.out);
		}
		String next(){
			while(st==null || !st.hasMoreElements()){
				try{
					st= new StringTokenizer(br.readLine());
				}
				catch (IOException e){
					e.printStackTrace();
				}
			}
			return st.nextToken();
		}
		int nextInt(){
			return Integer.parseInt(next());
		}
		long nextLong(){
			return Long.parseLong(next());
		}
		double nextDouble(){
			return Double.parseDouble(next());
		}
		String nextLine(){
			String str = "";
			try{
				str=br.readLine();
			}
			catch(IOException e){
				e.printStackTrace();
			}
			return str;
		}
	}

	static class pair{
		int first,second;
		pair(int f,int s){
			first=f;
			second=s;
		}
	}

	public static long fastexpo(long x, long y, long p){
		long res=1;
		while(y > 0){
			if((y & 1)==1)
				res= ((res%p)*(x%p))%p;
			y= y >> 1;			
			x = ((x%p)*(x%p))%p;
		}
		return res;
	}

	public static boolean[] sieve (int n) {
		boolean primes[]=new boolean[n+1];
		Arrays.fill(primes,true);
		primes[0]=primes[1]=false;
		for(int i=2;i*i<=n;i++){
			if(primes[i]){
				for(int j=i*i;j<=n;j+=i)
					primes[j]=false;
			}
		}
		return primes;
	}

	public static long gcd(long a,long b){
        return (BigInteger.valueOf(a).gcd(BigInteger.valueOf(b))).longValue();
    }

    public static void merge(int a[],int l,int m,int r){
        int n1,n2,i,j,k;
        n1=m-l+1;
        n2=r-m;

        int L[]=new int[n1];
        int R[]=new int[n2];

        for(i=0;i<n1;i++)
            L[i]=a[l+i];
        for(j=0;j<n2;j++)
            R[j]=a[m+1+j];

        i=0;j=0;

        k=l;
        while(i<n1&&j<n2){
            if(L[i]<=R[j]){
                a[k]=L[i];
                i++;
            }
            else{
                a[k]=R[j];
                j++;
            }
            k++;
        }

        while(i<n1){
            a[k]=L[i];
            i++;
            k++;
        }
        while(j<n2){
            a[k]=R[j];
            j++;
            k++;
        }
    }
    public static void sort(int a[],int l,int r){
        int m;
        if(l<r){
            m=(l+r)/2;
            sort(a,l,m);
            sort(a,m+1,r);
            merge(a,l,m,r);
        }
    }
}

