#include using namespace std; using ll = long long; using Pi = pair; using Pl = pair; using vint = vector; using vvint = vector; using vvvint = vector; using vdouble = vector; using vvdouble = vector; using vvvdouble = vector; using vll = vector; using vvll = vector; using vvvll = vector; using uint = unsigned int; using ull = unsigned long long; template using uset = unordered_set; template using umap = unordered_map; constexpr int INF = (1 << 30) - 1; constexpr ll LLINF = 1LL << 60; constexpr int dy[] = {1, 0, -1, 0, 1, -1, -1, 1}; constexpr int dx[] = {0, 1, 0, -1, 1, 1, -1, -1}; constexpr char el = '\n'; constexpr int mod = 1000000007; template T gcd(T a, T b) { return (b ? gcd(b, a % b) : a); } template T lcm(T a, T b) { return (a / gcd(a, b) * b); } template inline bool chmin(T1 &a, T2 b) { return (a > b && (a = b, true)); } template inline bool chmax(T1 &a, T2 b) { return (a < b && (a = b, true)); } template ostream& operator <<(ostream &os, vector &v) { os << v[0]; for (int i = 1; i < v.size(); i++) os << " " << v[i]; return (os); } template istream& operator >>(istream &is, vector &v) { for (auto &u : v) is >> u; return (is); } template istream& operator >>(istream &is, pair &p) { return (is >> p.first >> p.second); } void Main() { vint D(4); cin >> D; sort(begin(D), end(D)); if (D[0] + 1 == D[1] && D[1] + 1 == D[2] && D[2] + 1 == D[3]) { cout << "Yes" << endl; } else { cout << "No" << endl; } } int main() { cin.tie(0); ios::sync_with_stdio(0); cout << fixed << setprecision(20); Main(); return (0); }