#include <bits/stdc++.h>
using namespace std;
struct target {
  long long x, y, t;
  double p;
  target(long long a, long long b, long long c, double d) {
    x = a;
    y = b;
    t = c;
    p = d;
  }
};
bool comp(target a, target b) { return a.t < b.t; }
vector<target> targets;
double d(long long x, long long y) { return (x - y) * (x - y); }
inline bool inRange(long long i, long long j) {
  double x1 = targets[i].x;
  double y1 = targets[i].y;
  double x2 = targets[j].x;
  double y2 = targets[j].y;
  if (sqrt(d(x1, x2) + d(y1, y2)) <= targets[i].t - targets[j].t) return true;
  return false;
}
int32_t main(void) {
  long long i, j;
  long long n;
  cin >> n;
  for (i = 0; i < n; i++) {
    long long a, b, c;
    double d;
    scanf("%lld %lld %lld %lf", &a, &b, &c, &d);
    target t(a, b, c, d);
    targets.emplace_back(t);
  }
  sort(targets.begin(), targets.end(), comp);
  double dp[n];
  for (i = 0; i < n; i++) {
    dp[i] = targets[i].p;
    for (j = 0; j < i; j++) {
      if (inRange(i, j)) dp[i] = max(dp[i], targets[i].p + dp[j]);
    }
  }
  printf("%.13lf\n", *max_element(dp, dp + n));
  return 0;
}
