#include <bits/stdc++.h>
using namespace std;
using ldb = long double;
const ldb eps = 1e-12;
const ldb pi = acos(-1.0);
int zr(ldb a) { return (a > eps) - (a < -eps); }
int main() {
  ldb x1, y1, r1, x2, y2, r2;
  cin >> x1 >> y1 >> r1 >> x2 >> y2 >> r2;
  ldb dis = hypot(x1 - x2, y1 - y2);
  if (zr(r1 + r2 - dis) <= 0) return puts("0.00000000000000000000");
  if (zr(abs(r1 - r2) - dis) >= 0) {
    cout << fixed << setprecision(20) << pi * min(r1, r2) * min(r1, r2);
    return 0;
  }
  ldb angle = atan2(y2 - y1, x2 - x1);
  ldb ag1 = 2.0 * acos((r1 * r1 + dis * dis - r2 * r2) / 2.0 / r1 / dis);
  ldb ag2 = 2.0 * acos((r2 * r2 + dis * dis - r1 * r1) / 2.0 / r2 / dis);
  ldb area1 = ag1 * r1 * r1 / 2 - r1 * r1 * sin(ag1) / 2;
  if (zr(ag1 - pi) > 0)
    area1 = ag1 * r1 * r1 / 2 + r1 * r1 * sin(2 * pi - ag1) / 2;
  ldb area2 = ag2 * r2 * r2 / 2 - r2 * r2 * sin(ag2) / 2;
  if (zr(ag2 - pi) > 0)
    area2 = ag2 * r2 * r2 / 2 + r2 * r2 * sin(2 * pi - ag2) / 2;
  cout << fixed << setprecision(20) << area1 + area2;
}
