#include <bits/stdc++.h> #define int long long int using namespace std; template<typename T,typename U> using P=pair<T,U>; template<typename T> using V=vector<T>; template<typename T>bool chmax(T&a,T b){if(a<b){a=b;return true;}return false;} template<typename T>bool chmin(T&a,T b){if(a>b){a=b;return true;}return false;} template<typename T>auto&operator<<(ostream&s,const vector<T>&v){s<<"[";bool a=1;for(auto e:v){s<<(a?"":" ")<<e;a=0;}s<<"]";return s;} template<typename T,typename U>auto&operator<<(ostream&s,const pair<T,U>&p){s<<"("<<p.first<<","<<p.second<<")";return s;} template<typename T>auto&operator<<(ostream&s,const set<T>&st){s<<"{";bool a=1;for(auto e:st){s<<(a?"":" ")<<e;a=0;}s<<"}";return s;} template<typename T,typename U>auto&operator<<(ostream&s,const map<T,U>&m){s<<"{";bool a=1;for(auto e:m){s<<(a?"":" ")<<e.first<<":"<<e.second;a=0;}s<<"}";return s;} #define DUMP(x) cerr<<#x<<" = "<<(x)<<endl; struct edge { int to, cost; }; const int INF = 1e18; const int MOD = 1e9+7; signed main() { int a, b, c, d; cin >> a >> b >> c >> d; int ans = (b - a + 1) * (d - c + 1) - max(min(b,d) - max(a,c) + 1, 0LL); cout << ans << endl; return 0; }