#include <bits/stdc++.h>
struct taj {
  int x;
  int y;
  int t;
  double p;
} po[1010];
int check(int a, int b) {
  long long t = (long long)(po[b].t - po[a].t) * (po[b].t - po[a].t);
  long long x = (po[a].x - po[b].x) * (po[a].x - po[b].x) +
                (po[a].y - po[b].y) * (po[a].y - po[b].y);
  if (t >= x) return 1;
  return 0;
}
double dp[1010];
int cmp(const void *a, const void *b) {
  struct taj *x = (struct taj *)a;
  struct taj *y = (struct taj *)b;
  return x->t - y->t;
}
double max(double a, double b) { return a > b ? a : b; }
int main() {
  memset(dp, 0, sizeof(dp));
  int n;
  scanf("%d", &n);
  int i, j;
  for (i = 0; i < n; i++) {
    scanf("%d%d%d%lf", &po[i].x, &po[i].y, &po[i].t, &po[i].p);
  }
  qsort(po, n, sizeof(struct taj), cmp);
  dp[0] = po[0].p;
  double ans = dp[0];
  for (i = 1; i < n; i++) {
    for (j = 0; j < i; j++) {
      if (check(j, i)) {
        if (dp[j] + po[i].p > dp[i]) dp[i] = dp[j] + po[i].p;
      }
    }
    if (dp[i] == 0) dp[i] = po[i].p;
    if (ans < dp[i]) ans = dp[i];
  }
  printf("%.10f\n", ans);
  return 0;
}
