#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const long long inf64 = 0x3f3f3f3f3f3f3f3fLL;
const long double pi = 3.14159265358979;
const long double eps = 1e-7;
struct target {
  int x, y;
  long long t;
  long double p;
  bool operator<(const target& other) const { return t < other.t; }
};
const int maxn = 1 << 10;
target targets[maxn];
long double ans[maxn];
bool can(int a, int b) {
  int dx = targets[a].x - targets[b].x;
  int dy = targets[a].y - targets[b].y;
  long long d = (dx * dx + dy * dy);
  long long dt = targets[b].t - targets[a].t;
  return (d <= dt * dt);
}
int main() {
  int n;
  cin >> n;
  for (int i = 1; i <= n; i++)
    cin >> targets[i].x >> targets[i].y >> targets[i].t >> targets[i].p;
  targets[0].x = targets[0].y = targets[0].t = 0;
  targets[0].p = 0;
  sort(targets + 1, targets + n + 1);
  long double res = 0;
  for (int i = 1; i <= n; i++) {
    ans[i] = targets[i].p;
    for (int j = 1; j < i; j++)
      if (can(i, j)) {
        ans[i] = max(ans[i], ans[j] + targets[i].p);
      }
    if (ans[i] > res) res = ans[i];
  }
  printf("%.9lf\n", static_cast<double>(res));
  return 0;
}
