#pragma region template #include using namespace std; // -type- using ll = long long; using pii = pair; using pll = pair; using vi = vector; using vvi = vector; using vl = vector; using vvl = vector; using vs = vector; using vpii = vector; using vpll = vector; // -const- const ll MOD = 1000000007; const ll INF = (ll)0x3f0000003f000000; const double EPS = 1e-9; const int dx[] = {0, 1, 0, -1, 1, -1, 1, -1}, dy[] = {1, 0, -1, 0, 1, -1, -1, 1}; // -define- #define reps(i, k, n) for (int i = (k), i##_len = (n); i < i##_len; ++i) #define rep(i, n) reps(i, 0, n) #define repsr(i, k, n) \ for (int i = int(n) - 1, i##_len = (k); i >= i##_len; --i) #define repr(i, n) for (int i = int(n) - 1; i >= 0; --i) #define all(o) begin(o), end(o) #define sz(a) ((int)(a).size()) #define debug(...) debug_args(__LINE__, __VA_ARGS__) // clang-format off // -functions- inline bool in(string s, string c) {return (s.find(c) != string::npos);} inline bool in(string s, char c) {return (s.find(c) != string::npos);} template T udiv(T a, T b) {return (a + b - 1) / b;} template T rdiv(T a, T b) {return (a + b / 2) / b;} void print_args(ostream&) {} template void print_args(ostream& out,const S& a,const T&... args) { out << ' ' << a; print_args(out, args...); } template void print(const S& a, const T&... args) { std::cout << a; print_args(std::cout, args...); std::cout << '\n'; } template void debug_args(const S& a, const T&... args) { std::cout << "(L:" << std::setw(3) << a << ")"; print_args(std::cout, args...); std::cout << '\n'; } // clang-format on struct setup_main { setup_main() { std::cin.tie(0); std::ios::sync_with_stdio(0); std::cout << fixed << setprecision(15); } } setup_main_; ll ans = 0; #pragma endregion using typ = array; bool is_seq(typ a) { if (a[1] - a[0] == 1 and a[2] - a[1] == 1 and a[3] - a[2] == 1) return true; return false; } int main() { typ in; cin >> in[0] >> in[1] >> in[2] >> in[3]; sort(all(in)); if (is_seq(in)) print("Yes"); else print("No"); }