#include <bits/stdc++.h>
double pi = acos(-1);
double eps = 1e-9;
long long z = 1000000007;
long long inf = 100000000000000000;
long long p1 = 37;
long long p2 = 53;
long long mod1 = 202976689;
long long mod2 = 203034253;
long long fact[100];
long long gdp(long long a, long long b) { return (a - (a % b)); }
long long ld(long long a, long long b) {
  if (a < 0) return -1 * gdp(abs(a), b);
  if (a % b == 0) return a;
  return (a + (b - a % b));
}
long long gd(long long a, long long b) {
  if (a < 0) return (-1 * ld(abs(a), b));
  return (a - (a % b));
}
long long gcd(long long a, long long b) {
  if (b > a) return gcd(b, a);
  if (b == 0) return a;
  return gcd(b, a % b);
}
long long e_gcd(long long a, long long b, long long& x, long long& y) {
  if (b > a) return e_gcd(b, a, y, x);
  if (b == 0) {
    x = 1;
    y = 0;
    return a;
  }
  long long x1, y1;
  e_gcd(b, a % b, x1, y1);
  x = y1;
  y = (x1 - ((a / b) * y1));
  return e_gcd(b, a % b, x1, y1);
}
long long power(long long a, long long b, long long p) {
  if (b == 0) return 1;
  long long c = power(a, b / 2, p);
  if (b % 2 == 0)
    return ((c * c) % p);
  else
    return ((((c * c) % p) * a) % p);
}
long long inverse(long long a, long long n) { return power(a, n - 2, n); }
long long max(long long a, long long b) {
  if (a > b) return a;
  return b;
}
long long min(long long a, long long b) {
  if (a < b) return a;
  return b;
}
double min(double a, double b) {
  if (a < b) return a;
  return b;
}
double max(double a, double b) {
  if (a > b) return a;
  return b;
}
long long left(long long i) { return ((2 * i) + 1); }
long long right(long long i) { return ((2 * i) + 2); }
long long ncr(long long n, long long r) {
  if (n < r || (n < 0) || (r < 0)) return 0;
  return ((((fact[n] * inverse(fact[r], z)) % z) * inverse(fact[n - r], z)) %
          z);
}
void swap(long long& a, long long& b) {
  long long c = a;
  a = b;
  b = c;
  return;
}
using namespace std;
double angle(double x, double y) {
  double ang = atan2(y, x);
  if (ang < -eps) ang += (2 * pi);
  return ang;
}
double cross(double x1, double y1, double x2, double y2) {
  return (x1 * y2 - x2 * y1);
}
double dist_(double x1, double y1, double x2, double y2) {
  double x = x1 - x2;
  double y = y1 - y2;
  return sqrtl(x * x + y * y);
}
void get_pts(double a, double b, double c, double& x1, double& y1, double& x2,
             double& y2) {
  if (fabs(b) < eps) {
    x1 = x2 = (-c) / a;
    y1 = 1;
    y2 = 2;
    return;
  }
  x1 = 0, x2 = 1;
  y1 = ((-c) / b);
  y2 = (-(c + a)) / b;
  return;
}
double std_dist(double x, double y, double a, double b, double c) {
  double x1, y1, x2, y2;
  get_pts(a, b, c, x1, y1, x2, y2);
  double area = cross(x - x1, y - y1, x2 - x1, y2 - y1);
  double d = dist_(x1, y1, x2, y2);
  return fabs(area / d);
}
void line_circle(double a, double b, double c, double r,
                 vector<pair<double, double> >& v) {
  double x = (-a * c) / (a * a + b * b);
  double y = (-b * c) / (a * a + b * b);
  double dist = std_dist(0, 0, a, b, c);
  if (dist > r && fabs(dist - r) > eps) {
    return;
  }
  if (fabs(dist - r) < eps) {
    v.push_back(make_pair(x, y));
    return;
  }
  double d = sqrtl(r * r - dist * dist);
  double x1 = x - ((-b * d) / (sqrtl(a * a + b * b)));
  double y1 = y - ((a * d) / (sqrtl(a * a + b * b)));
  v.push_back(make_pair(x1, y1));
  x1 = x + ((-b * d) / (sqrtl(a * a + b * b)));
  y1 = y + ((a * d) / (sqrtl(a * a + b * b)));
  v.push_back(make_pair(x1, y1));
  return;
}
void circle_circle(double r1, double x, double y, double r2, double& a1,
                   double& a2) {
  if (r1 > sqrtl(x * x + y * y - r2 * r2 + eps)) {
    r1 = sqrtl(x * x + y * y - r2 * r2);
  }
  double len = sqrt(x * x + y * y);
  double c = (x * x + y * y + r1 * r1 - r2 * r2) / (2 * len * r1);
  double deta = acos(c);
  double ang = atan2(y, x);
  a1 = ang - deta, a2 = ang + deta;
  if (a1 < -eps) a1 += 2 * pi;
  if (a1 > 2 * pi + eps) a1 -= 2 * pi;
  if (a2 < -eps) a2 += 2 * pi;
  if (a2 > 2 * pi + eps) a2 -= 2 * pi;
  return;
}
void solve() {
  double x, y, vi, t;
  scanf("%lf %lf %lf %lf", &x, &y, &vi, &t);
  double r1 = vi * t;
  int n;
  scanf("%d", &n);
  vector<tuple<double, double, double> > v;
  for (long long i = 0; i < n; i++) {
    double x2, y2, r2;
    scanf("%lf %lf %lf", &x2, &y2, &r2);
    x2 -= x;
    y2 -= y;
    if ((x2 * x2 + y2 * y2) <= (r2 * r2)) {
      cout << fixed << setprecision(10) << 1.0 << endl;
      return;
    }
    if (sqrtl(x2 * x2 + y2 * y2) > (r1 + r2 + eps)) continue;
    v.push_back(make_tuple(x2, y2, r2));
  }
  vector<pair<double, double> > ans;
  for (long long i = 0; i < v.size(); i++) {
    double x = get<0>(v[i]);
    double y = get<1>(v[i]);
    double r2 = get<2>(v[i]);
    double ang_1, ang_2;
    circle_circle(r1, x, y, r2, ang_1, ang_2);
    double a1 = min(ang_1, ang_2);
    double a2 = max(ang_1, ang_2);
    if (((a2 - a1) < (pi + eps))) {
      ans.push_back(make_pair(a1, a2));
    } else {
      ans.push_back(make_pair(0, a1));
      ans.push_back(make_pair(a2, 2 * pi));
    }
  }
  sort(ans.begin(), ans.end());
  vector<pair<double, double> > fin_ans;
  int s = 0;
  if (ans.size() == 0) {
    cout << fixed << setprecision(10) << 0.0 << endl;
    return;
  }
  fin_ans.push_back(ans[0]);
  for (int i = 1; i < ans.size(); i++) {
    if (ans[i].first > (fin_ans[s].second + eps)) {
      fin_ans.push_back(ans[i]);
      s++;
    } else {
      fin_ans[s].second = max(ans[i].second, fin_ans[s].second);
    }
  }
  double sum = 0;
  for (int i = 0; i < fin_ans.size(); ++i) {
    sum += (fin_ans[i].second - fin_ans[i].first);
  }
  printf("%.10f", sum / (2 * pi));
  return;
}
int main() {
  long long t;
  t = 1;
  while (t--) {
    solve();
  }
  return 0;
}
