#include <bits/stdc++.h>
using namespace std;
struct abc {
  int x, y, r;
} c[4];
int u[4];
bool pdin(abc a, abc b) {
  if (a.r > b.r) return false;
  double d = ((a.x - b.x) * (a.x - b.x)) + ((a.y - b.y) * (a.y - b.y));
  if (d <= ((a.r - b.r) * (a.r - b.r))) return true;
  return false;
}
bool cmp(abc a, abc b) {
  double d = ((a.x - b.x) * (a.x - b.x)) + ((a.y - b.y) * (a.y - b.y));
  if (((a.r + b.r) * (a.r + b.r)) <= d) return true;
  if (d <= ((a.r - b.r) * (a.r - b.r))) return true;
  return false;
}
int main() {
  int x, y, r, ans, i, j;
  scanf("%d%d%d", &x, &y, &r);
  c[0].x = x, c[0].y = y, c[0].r = r;
  scanf("%d", &r);
  c[1].x = x, c[1].y = y, c[1].r = r;
  scanf("%d%d%d", &x, &y, &r);
  c[2].x = x, c[2].y = y, c[2].r = r;
  scanf("%d", &r);
  c[3].x = x, c[3].y = y, c[3].r = r;
  ans = 0;
  for (i = 0; i < 4; i++) {
    for (j = 0; j < 4; j++) {
      if (i == j) continue;
      if (!cmp(c[i], c[j])) {
        break;
      }
    }
    if (j == 4) {
      u[i] = 1;
      ans++;
    }
  }
  if (u[1] == 1 && u[3] == 1) {
    if (!pdin(c[1], c[2]) && pdin(c[1], c[3])) {
      ans--;
    }
    if (!pdin(c[3], c[0]) && pdin(c[3], c[1])) {
      ans--;
    }
  }
  if (u[0]) {
    if (pdin(c[0], c[3]) && !pdin(c[0], c[2])) {
      ans--;
    }
  }
  if (u[2]) {
    if (pdin(c[2], c[1]) && !pdin(c[2], c[0])) {
      ans--;
    }
  }
  printf("%d\n", ans);
  return 0;
}
