#include <bits/stdc++.h>
using namespace std;
void cline() { cout << '\n'; }
template <typename T, typename... V>
void cline(T t, V... v) {
  cout << t;
  if (sizeof...(v)) cout << ' ';
  cline(v...);
}
void cspc() { cout << ' '; }
template <typename T, typename... V>
void cspc(T t, V... v) {
  cout << t;
  if (sizeof...(v)) cout << ' ';
  cspc(v...);
}
const long long N = 1004;
long long dist(long long x1, long long y1, long long x2, long long y2) {
  return (y1 - y2) * (y1 - y2) + (x1 - x2) * (x1 - x2);
}
long long n;
long long x[N], y[N], t[N];
double p[N];
double zero = 0;
double dp[N][N];
double rec(long long indx, long long pre, long long pretm) {
  if (indx > n) return zero;
  if (dp[indx][pre] != -1) return dp[indx][pre];
  if (pre == 0) {
    return dp[indx][pre] = max(rec(indx + 1, indx, t[indx]) + p[indx],
                               rec(indx + 1, pre, pretm));
  } else {
    if (dist(x[pre], y[pre], x[indx], y[indx]) <=
        (t[indx] - pretm) * (t[indx] - pretm)) {
      return dp[indx][pre] = max(rec(indx + 1, indx, t[indx]) + p[indx],
                                 rec(indx + 1, pre, pretm));
    } else {
      return dp[indx][pre] = rec(indx + 1, pre, pretm);
    }
  }
}
int32_t main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n;
  long long x1[n], y1[n];
  double p1[n];
  vector<pair<long long, long long>> vo;
  for (long long i = 0; i < n; i++) {
    long long tym;
    cin >> x1[i] >> y1[i] >> tym >> p1[i];
    vo.push_back({tym, i});
  }
  sort(vo.begin(), vo.end());
  for (long long i = 0; i < n; i++) {
    long long indu = vo[i].second;
    x[i + 1] = x1[indu];
    y[i + 1] = y1[indu];
    p[i + 1] = p1[indu];
    t[i + 1] = vo[i].first;
  }
  t[0] = 0;
  for (long long i = 0; i < N; i++) {
    for (long long j = 0; j < N; j++) {
      dp[i][j] = -1;
    }
  }
  cout << fixed << setprecision(11) << rec(1, 0, 0);
  return 0;
}
