#include <bits/stdc++.h>   using namespace std;   template <typename T1>   void print_list(const T1& a) {     cerr << a << endl;   }   template <typename T1, typename T2>   void print_list(const T1& a, const T2& b) {     cerr << a <<     << b << endl;   }   template <typename T1, typename T2, typename T3>   void print_list(const T1& a, const T2& b, const T3& c) {     cerr << a <<     << b <<     << c << endl;   }   template <typename T1, typename T2, typename T3, typename T4>   void print_list(const T1& a, const T2& b, const T3& c, const T4& d) {     cerr << a <<     << b <<     << c <<     << d << endl;   }   template <typename T1, typename T2, typename T3, typename T4, typename T5>   void print_list(const T1& a, const T2& b, const T3& c, const T4& d,                   const T5& e) {     cerr << a <<     << b <<     << c <<     << d <<     << e << endl;   }   template <typename T1, typename T2, typename T3, typename T4, typename T5,             typename T6>   void print_list(const T1& a, const T2& b, const T3& c, const T4& d, const T5& e,                   const T6& f) {     cerr << a <<     << b <<     << c <<     << d <<     << e <<     << f << endl;   }   template <typename T1, typename T2, typename T3, typename T4, typename T5,             typename T6, typename T7>   void print_list(const T1& a, const T2& b, const T3& c, const T4& d, const T5& e,                   const T6& f, const T7& g) {     cerr << a <<     << b <<     << c <<     << d <<     << e <<     << f <<              << g << endl;   }   template <typename A, typename B>   ostream& operator<<(ostream& out, const pair<A, B>& pp) {     out <<  (  << pp.first <<  ,  << pp.second <<  ) ;     return out;   }   template <typename A, typename B>   istream& operator<<(istream& in, pair<A, B>& pp) {     cerr <<  A pair wanted  << endl;     in >> pp.first >> pp.second;     return in;   }   template <typename T>   ostream& operator<<(ostream& out, const vector<T>& vect) {     out <<  length =   << vect.size() << endl;     for (int i = 0; i < vect.size(); i++) out << vect[i] <<    ;     out << endl;     return out;   }   template <typename T>   istream& operator>>(istream& in, vector<T>& vect) {     vect.clear();     int n;     cerr <<  A integer of length wanted  << endl;     in >> n;     vect.resize(n);     cerr << n <<   elements wanted  << endl;     for (int i = 0; i < n; i++) in >> vect[i];     return in;   }   template <typename T>   ostream& operator<<(ostream& out, const vector<vector<T> >& vect) {     out <<  row number=  << vect.size() << endl;     for (int i = 0; i < vect.size(); i++) {       out <<  row #  << i <<  : ;       for (int j = 0; j < vect[i].size(); j++) out <<     << vect[i][j];       out << endl;     }     return out;   }   template <typename T>   istream& operator>>(istream& in, vector<vector<T> >& vect) {     vect.clear();     int n, m;     cerr <<  Two integers wnated  << endl;     in >> n >> m;     vect.resize(n);     cerr <<  A matrix   << n <<   X   << m <<   wanted  << endl;     for (int i = 0; i < n; i++) {       vect[i].resize(m);       for (int j = 0; j < m; j++) in >> vect[i][j];     }     return in;   }   template <typename T>   inline void updateMax(T& a, const T& b) {     a = max(a, b);   }   template <typename T>   inline void updateMin(T& a, const T& b) {     a = min(a, b);   }   template <typename T>   inline vector<T> erase(vector<T> table, int ind) {     assert(ind < table.size());     table.erase(table.begin() + ind);     return table;   }   template <typename T>   vector<T> unique(vector<T> table) {     sort(table.begin(), table.end());     return vector<T>(table.begin(), unique(table.begin(), table.end()));   }   template <class T>   vector<T> parse(const string& ss, const char* cut =    ) {     vector<T> re;     for (int j = 0; j < ss.size(); j++) {       string s;       while (j < ss.size() && NULL == strchr(cut, ss[j])) s += ss[j++];       if (!s.empty()) {         T tmp;         istringstream is(s);         is >> tmp;         re.push_back(tmp);       }     }     return re;   }   int countBit(int n) {     int re = 0;     while (n) re++, n ^= ((((n) ^ ((n)-1)) & n));     return re;   }   int MSB(int n) {     if (n == 0) return 0;     while (((((n) ^ ((n)-1)) & n)) != n) n ^= ((((n) ^ ((n)-1)) & n));     return n;   }   void initHash(int n, int hash[]) {     for (int i = 0; i < n; i++) hash[((1) << (i))] = i;   }   void initBcnt(int n, int bcnt[]) {     bcnt[0] = 0;     for (int i = 1; i < ((1) << (n)); i++)       bcnt[i] = bcnt[i ^ ((((i) ^ ((i)-1)) & i))] + 1;   }   template <typename T>   T __gcd(T n, T m, T& a, T& b) {     T a1 = 0, b1 = 1;     a = 1, b = 0;     while (m) {       T c = n / m;       T r = n - m * c;       T t;       t = a;       a = a1;       a1 = t - c * a1;       t = b;       b = b1;       b1 = t - c * b1;       n = m;       m = r;     }     return n;   }   struct Node {     int r, c, d;     int v;     Node(int x, int y, int z, int v1) : r(x), c(y), d(z), v(v1){};     bool operator<(const Node& other) const { return v > other.v; };   };   priority_queue<Node> heap;   const int dir[][2] = {{-1, 0}, {0, 1},  {1, 0},  {0, -1},                         {1, 1},  {1, -1}, {-1, 1}, {-1, -1}};   const char dname[] =  NWSE ;   int get_inter(int r, int x, int n) {     x = abs(x);     int res = 0;     if (x > r) {       if (n >= x - r) res++;       if (n > x - r) res += (min(x + r - 1, n) - (x - r)) * 2;       if (n >= x + r) res++;     } else if (x == r) {       res += min(n, 2 * r - 1) * 2;       if (n >= 2 * r) res++;     } else {       if (n >= r - x) res++;       if (n > r - x) res += 2 * (min(x + r - 1, n) - (r - x));       if (n >= x + r) res++;     }     return res;   }   int main() {     int x1, x2, n1, n2;     cin >> n1 >> x1 >> n2 >> x2;     long long int v = 0, e = 0, iso = 0;     for (int i = 1; i <= n1; i++) {       int t = get_inter(i, x2 - x1, n2);       if (t) {         v += t + 1;         e += t + 1;       } else         iso++;     }     for (int i = 1; i <= n2; i++) {       int t = get_inter(i, x1 - x2, n1);       if (t) {         v++;         e += t + 1;       } else         iso++;     }     long long int ans = iso;     if (v)       ans += e + 2 - v;     else       ans++;     cout << ans << endl;     return 0;   }