#include <bits/stdc++.h>
using namespace std;
int n, t;
double d[1010][2];
struct p {
  double x, y;
  int t;
  double prob;
};
p a[1010];
bool less1(const p &a1, const p &a2) {
  return (a1.t < a2.t) || (a1.t == a2.t && a1.x < a2.x) ||
         (a1.t == a2.t && a1.x == a2.x && a1.y < a2.y);
}
double dist(double dx, double dy) { return sqrt(dx * dx + dy * dy); }
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++)
    scanf("%lf%lf%d%lf", &a[i].x, &a[i].y, &a[i].t, &a[i].prob);
  sort(a, a + n, less1);
  d[0][0] = 0;
  d[0][1] = a[0].prob;
  for (int i = 1; i < n; i++) {
    double mx = -1;
    for (int j = 0; j < i; j++)
      if (d[j][1] > mx) mx = d[j][1];
    d[i][0] = mx;
    mx = a[i].prob;
    for (int j = 0; j < i; j++) {
      if (dist(fabs(a[i].x - a[j].x), fabs(a[i].y - a[j].y)) - 2e-9 <=
          a[i].t - a[j].t)
        if (mx < d[j][1] + a[i].prob) mx = d[j][1] + a[i].prob;
    }
    d[i][1] = mx;
  }
  double mx = -1;
  for (int i = 0; i < n; i++)
    for (int k = 0; k < 2; k++)
      if (d[i][k] > mx) mx = d[i][k];
  printf("%.8lf\n", mx);
  return 0;
}
