#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
const int N = 300105;
template <typename T>
T gcd(T a, T b) {
  if (a == 0) return b;
  return gcd(b % a, a);
}
struct TTarget {
  int64_t x, y, t;
  double p;
  TTarget(int64_t _x = 0, int64_t _y = 0, int64_t _t = 0, double _p = 0.0)
      : x(_x), y(_y), t(_t), p(_p) {}
  bool reach(const TTarget &tar) const {
    return (x - tar.x) * (x - tar.x) + (y - tar.y) * (y - tar.y) <=
           (t - tar.t) * (t - tar.t);
  }
  bool operator<(const TTarget &tar) const { return t < tar.t; }
};
void solve_tst() {
  int n;
  cin >> n;
  vector<TTarget> targets(n);
  for (int i = 0; i < n; ++i) {
    cin >> targets[i].x >> targets[i].y >> targets[i].t >> targets[i].p;
  }
  sort(targets.begin(), targets.end());
  vector<double> dp(n, 0.0);
  double result = 0.0;
  for (int i = 0; i < n; ++i) {
    dp[i] = max(dp[i], targets[i].p);
    result = max(result, dp[i]);
    for (int j = i + 1; j < n; ++j) {
      if (targets[i].reach(targets[j])) {
        dp[j] = max(dp[j], dp[i] + targets[j].p);
      }
    }
  }
  cout << setprecision(7) << result;
}
int32_t main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int tc = 1;
  while (tc--) solve_tst();
  return 0;
}
