#include <bits/stdc++.h>
const long double eps = 1e-9;
const long double pi = acos(-1);
bool Equal(long double x, long double y) { return fabs(x - y) < eps; }
bool Greater(long double x, long double y) { return x - eps > y; }
bool Lesser(long double x, long double y) { return x + eps < y; }
struct point {
  long double x, y, ang;
};
using namespace std;
int main() {
  long long x1, y1, r1, x2, y2, r2;
  cin >> x1 >> y1 >> r1;
  cin >> x2 >> y2 >> r2;
  if (r1 < r2) {
    swap(r1, r2);
    swap(x1, x2);
    swap(y1, y2);
  }
  long long c1c2 = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
  cout << setprecision(10) << fixed;
  long double ans = 0.0, rr1, rr2;
  if (c1c2 >= (r1 + r2) * (r1 + r2)) {
    printf("0.000000000000");
    return 0;
  } else if (c1c2 <= (r1 - r2) * (r1 - r2)) {
    cout << pi * (long double)r2 * (long double)r2;
    return 0;
  }
  long double d = sqrt((long double)c1c2);
  rr1 = r1, rr2 = r2;
  long double th2 = acos((rr2 * rr2 + d * d - rr1 * rr1) / (2 * rr2 * d));
  long double th1 = acos((rr1 * rr1 + d * d - rr2 * rr2) / (2 * rr1 * d));
  long double second = th1 * rr1 * rr1;
  long double t = rr1 * rr1 * sin(th1) * cos(th1);
  ans += second - t;
  second = th2 * rr2 * rr2;
  t = rr2 * rr2 * sin(th2) * cos(th2);
  ans += second - t;
  cout << ans;
}
