#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) {
  if (!b) return a;
  return gcd(b, a % b);
}
long long fpow(long long a, long long b, long long mod) {
  long long res = 1ll;
  while (b) {
    if (b & 1) res = (res * a) % mod;
    a = (a * a) % mod;
    b >>= 1;
  }
  return res;
}
long long mul(long long a, long long b, long long mod) {
  long long res = 0;
  while (b) {
    if (b & 1) res = (res + a) % mod;
    a = (a + a) % mod;
    b >>= 1;
  }
  return res;
}
const long long mod = 2015;
const double eps = 1e-3;
const double pi = acos(-1);
const long long N = 5005;
double dp[N];
struct node {
  int x, y, ti;
  double pi;
  bool operator<(const node &o) const { return ti < o.ti; }
} a[N];
double dis(long long x, long long y) {
  return sqrt((a[x].x - a[y].x) * (a[x].x - a[y].x) +
              (a[x].y - a[y].y) * (a[x].y - a[y].y));
}
int main() {
  long long n;
  scanf("%lld", &n);
  for (long long i = 1; i <= n; i++)
    cin >> a[i].x >> a[i].y >> a[i].ti >> a[i].pi;
  sort(a + 1, a + 1 + n);
  double ans = 0;
  for (long long i = 1; i <= n; i++) {
    dp[i] = a[i].pi;
    for (long long j = 1; j <= i - 1; j++) {
      if (a[i].ti - a[j].ti - dis(i, j) > -eps)
        dp[i] = max(dp[j] + a[i].pi, dp[i]);
    }
    ans = max(dp[i], ans);
  }
  printf("%.8lf", ans);
  return 0;
}
