#include <bits/stdc++.h>
void swap(long double& a, long double& b) {
  long double tmp = a;
  a = b, b = tmp;
}
long double solve(long double d, long double r, long double R) {
  const long double EPS = 1e-9L;
  if (d + EPS >= r + R) return 0;
  if (r > R) swap(r, R);
  if (R + EPS >= d + r) return acosl(-1.0) * r * r;
  long double T = 2 * acosl((R * R + d * d - r * r) / (2 * R * d)),
              t = 2 * acosl((r * r + d * d - R * R) / (2 * r * d));
  return .5 * (R * R * (T - sinl(T)) + r * r * (t - sinl(t)));
}
int main() {
  long double x1, y1, r1, x2, y2, r2;
  scanf("%Lf%Lf%Lf%Lf%Lf%Lf", &x1, &y1, &r1, &x2, &y2, &r2);
  long double dx = x1 - x2, dy = y1 - y2;
  printf("%.20Lf\n", solve(sqrtl(dx * dx + dy * dy), r1, r2));
}
