#include <bits/stdc++.h>
using namespace std;
bool gprintf(int debug, const char *format, ...) {
  if (0 & debug) {
    va_list listpointer;
    va_start(listpointer, format);
    vfprintf(stderr, format, listpointer);
    va_end(listpointer);
    return true;
  } else
    return false;
}
struct Target {
  long long x, y;
  long long t;
  double p;
  bool operator<(const Target &r) const { return t < r.t; }
};
Target targets[1000];
int n;
double expec[1001];
int main() {
  int i, j;
  long long d, dt;
  scanf("%d", &n);
  for ((i) = 0; (i) < (n); (i)++)
    cin >> targets[i].x >> targets[i].y >> targets[i].t >> targets[i].p;
  sort(targets, targets + n);
  expec[n] = 0;
  for (i = n - 1; i >= 0; i--) {
    expec[i] = 0;
    for (j = i + 1; j < n; j++) {
      dt = targets[j].t - targets[i].t;
      d = (targets[j].x - targets[i].x) * (targets[j].x - targets[i].x) +
          (targets[j].y - targets[i].y) * (targets[j].y - targets[i].y);
      if (d <= dt * dt) {
        expec[i] = max(expec[i], targets[j].p + expec[j]);
      }
    }
  }
  double sol = 0, c;
  for (i = 0; i < n; i++) {
    c = targets[i].p + expec[i];
    sol = max(sol, c);
  }
  printf("%.10lf\n", sol);
  return 0;
}
