#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

int  main()
{
	int a[5];
	ll sum=0;
	while(cin>>a[1]>>a[2]>>a[3]>>a[4])
	{
		sum=a[1]+a[2]+a[3]+a[4];
		int flag=0;
		for(int i=1;i<=4;i++)
		{
			if(sum-a[i]==a[i])
			{
				flag=1;
				break;
			}
		}
		if(!flag)
		{
			for(int i=1;i<=3;i++)
		{
			for(int j=i+1;j<=4;j++)
			{
				if(sum-a[i]-a[j]==a[i]+a[j])
				{
					flag=1;
					break;
				}
			}
			if(flag==1)break;
		}
		}
		if(flag)cout<<"Yes"<<endl;
		else cout<<"No"<<endl;
	}
	return 0;
}
#include <bits/stdc++.h>
#define rep(i, n) for (lli i = 0; i < (n); i++)
#define rrep(i, n) for (lli i = (n)-1; i >= 0; i--)
#define vall(x) (x).begin(), (x).end()
using namespace std;
namespace atcoder {}
using namespace atcoder;
using lli = long long int;
void YESNO(bool), YesNo(bool);
template <class T1, class T2> bool chmin(T1 &l, const T2 &r);
template <class T1, class T2> bool chmax(T1 &l, const T2 &r);
template <class T1, class T2> void vadd(vector<T1> &v, T2 x);

#define int long long int

void solve(long long A, long long B, long long C, long long D) {
  int c[4] = {A, B, C, D};
  int sm = A + B + C + D;
  rep(i, 1 << 4) {
    int tmp = 0;
    rep(j, 4) {
      if ((i >> j) & 1) {
        tmp += c[j];
      }
    }
    if (tmp * 2 == sm) {
      cout << "Yes" << endl;
      return;
    }
  }
  cout << "No" << endl;
}

signed main() {
  long long A;
  scanf("%lld", &A);
  long long B;
  scanf("%lld", &B);
  long long C;
  scanf("%lld", &C);
  long long D;
  scanf("%lld", &D);
  solve(A, B, C, D);
  return 0;
}

// -- lib
void YESNO(bool b) { cout << (b ? "YES" : "NO") << endl; }
void YesNo(bool b) { cout << (b ? "Yes" : "No") << endl; }

template <class T1, class T2> bool chmin(T1 &l, const T2 &r) {
  return (l > r) ? (l = r, true) : false;
}

template <class T1, class T2> bool chmax(T1 &l, const T2 &r) {
  return (l < r) ? (l = r, true) : false;
}

template <class T1, class T2> void vadd(vector<T1> &v, T2 x) {
  for (auto &s : v)
    s += T2(x);
}
