#include <bits/stdc++.h>
using namespace std;
long double min(long double a, long double b) { return a < b ? a : b; }
long double tri(long double a, long double b, long double c) {
  long double s = (a + b + c) / 2;
  return sqrt(s * (s - a) * (s - b) * (s - c));
}
long double dist(long double x1, long double y1, long double x2,
                 long double y2) {
  long double dx = x2 - x1;
  long double dy = y2 - y1;
  return sqrt(dx * dx + dy * dy);
}
long double area(long double x1, long double y1, long double r1, long double x2,
                 long double y2, long double r2) {
  long double d = dist(x1, y1, x2, y2);
  if (d >= (r1 + r2)) return 0;
  if (d <= abs(r1 - r2)) return 3.14159265358979323846 * min(r1 * r1, r2 * r2);
  long double t1 = 2 * acos((r2 * r2 + d * d - r1 * r1) / (2 * r2 * d));
  long double t2 = 2 * acos((r1 * r1 + d * d - r2 * r2) / (2 * r1 * d));
  long double a1 = .5 * t1 * r2 * r2 - .5 * r2 * r2 * sin(t1);
  long double a2 = .5 * t2 * r1 * r1 - .5 * r1 * r1 * sin(t2);
  return a1 + a2;
}
int main() {
  long double x1, y1, r1;
  long double x2, y2, r2;
  cin >> x1 >> y1 >> r1 >> x2 >> y2 >> r2;
  cout << setprecision(32) << area(x1, y1, r1, x2, y2, r2);
  return 0;
}
