#include <bits/stdc++.h>
using namespace std;
const double pi = 3.141592653589793238463;
int x[1009], y[1009], t[1009];
double p[1009];
double dp[1009][1009];
int n;
double sol(int i, int prev) {
  if (i == n) return 0;
  if (dp[i][prev] == dp[i][prev]) return dp[i][prev];
  bool can = true;
  if (prev == n)
    can = true;
  else {
    int dt = t[i] - t[prev];
    int dx = abs(x[i] - x[prev]);
    int dy = abs(y[i] - y[prev]);
    can = (dt >= hypot(dx, dy));
  }
  if (!can) return dp[i][prev] = sol(i + 1, prev);
  return dp[i][prev] = max(sol(i + 1, prev), p[i] + sol(i + 1, i));
}
struct target {
  int x, y, t;
  double p;
  bool operator<(const target &other) const { return t < other.t; }
};
int main() {
  cin.tie(0);
  cin.sync_with_stdio(0);
  cin >> n;
  vector<target> v;
  for (int i = 0; i < (n); i++) {
    int x, y, t;
    cin >> x >> y >> t;
    double p;
    cin >> p;
    v.push_back({x, y, t, p});
  }
  sort(v.begin(), v.end());
  for (int i = 0; i < (n); i++)
    x[i] = v[i].x, y[i] = v[i].y, t[i] = v[i].t, p[i] = v[i].p;
  memset((dp), (-1), sizeof(dp));
  printf("%.10f\n", sol(0, n));
  return 0;
}
