#include <bits/stdc++.h>
using namespace std;
const auto start_time = std::chrono::high_resolution_clock::now();
void timecalculater() {}
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
void __print(int x) { cout << x; }
void __print(long x) { cout << x; }
void __print(long long x) { cout << x; }
void __print(unsigned x) { cout << x; }
void __print(unsigned long x) { cout << x; }
void __print(unsigned long long x) { cout << x; }
void __print(float x) { cout << x; }
void __print(double x) { cout << x; }
void __print(long double x) { cout << x; }
void __print(char x) { cout << '\'' << x << '\''; }
void __print(const char *x) { cout << '\"' << x << '\"'; }
void __print(const string &x) { cout << '\"' << x << '\"'; }
void __print(bool x) { cout << (x ? "true" : "false"); }
template <typename T, typename V>
void __print(const pair<T, V> &x) {
  cout << '{';
  __print(x.first);
  cout << ',';
  __print(x.second);
  cout << '}';
}
template <typename T>
void __print(const T &x) {
  int f = 0;
  cout << '{';
  for (auto &i : x) cout << (f++ ? "," : ""), __print(i);
  cout << "}";
}
void _print() { cout << "]\n"; }
template <typename T, typename... V>
void _print(T t, V... v) {
  __print(t);
  if (sizeof...(v)) cout << ", ";
  _print(v...);
}
long long p = 1e9 + 7;
const int N = 2e5 + 5;
long double dis(long double x1, long double y1, long double x2,
                long double y2) {
  long double x = (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1);
  return sqrt(x);
}
int main() {
  cin.sync_with_stdio(0);
  cin.tie(0);
  cin.exceptions(cin.failbit);
  ;
  int T = 1;
  while (T--) {
    long double x1, y1, r1;
    cin >> x1 >> y1 >> r1;
    long double x2, y2, r2;
    cin >> x2 >> y2 >> r2;
    long double ans = 0;
    long double d = dis(x1, y1, x2, y2);
    long double d1 = (r1 * r1 - r2 * r2) / (2 * d) + d / 2;
    long double d2 = (r2 * r2 - r1 * r1) / (2 * d) + d / 2;
    long double pi = acos(-1);
    if (d <= (r1 - r2)) {
      ans = pi * r2 * r2;
    } else if (d <= (r2 - r1)) {
      ans = pi * r1 * r1;
    } else if (d < (r1 + r2)) {
      long double alpha = acos((r2 * r2 + d * d - r1 * r1) / (2 * r2 * d));
      long double s = alpha * r2 * r2;
      long double t = r2 * r2 * sin(alpha) * cos(alpha);
      long double ans1, ans2;
      ans1 = s - t;
      alpha = acos((r1 * r1 + d * d - r2 * r2) / (2 * r1 * d));
      s = alpha * r1 * r1;
      t = r1 * r1 * sin(alpha) * cos(alpha);
      ans2 = s - t;
      ans = ans1 + ans2;
    }
    cout << fixed << setprecision(9);
    cout << ans;
  }
  timecalculater();
  return 0;
}
