#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1);
const int maxn = 5e5;
struct line {
  double x, y;
} A[maxn];
long long X, Y, R;
double x0, Y0, v, T, d, x, y, r, M, D;
double a, b, now, ans, th, l, Max;
int i, n, la;
double sqr(double x) { return x * x; }
double dist(double x, double y, double x0, double Y0) {
  return sqrt(sqr(x - x0) + sqr(y - Y0));
}
bool cmp(line a, line b) { return a.x < b.x || (a.x == b.x && a.y < b.y); }
int main() {
  scanf("%lf%lf%lf%lf", &x0, &Y0, &v, &T);
  M = v * T;
  scanf("%d", &n);
  for (i = 1; i <= n; i++) {
    scanf("%lf%lf%lf", &x, &y, &r);
    X = x - x0;
    Y = y - Y0;
    R = r;
    if (X * X + Y * Y <= R * R) {
      printf("1");
      return 0;
    }
    d = dist(x0, Y0, x, y);
    a = d - r;
    b = sqrt(sqr(d) - sqr(r));
    double B = atan2(y - Y0, x - x0);
    if (a < M) {
      if (b <= M) {
        th = asin(r / d);
      } else {
        th = acos((M * M + d * d - r * r) / (2 * M * d));
      }
      l = B - th;
      r = B + th;
      if (l < -PI) {
        A[++la] = (line){l + 2 * PI, PI};
        l = -PI;
      }
      if (r > PI) {
        A[++la] = (line){-PI, r - 2 * PI};
        r = PI;
      }
      A[++la] = (line){l, r};
    }
  }
  if (!la) {
    printf("0");
    return 0;
  }
  sort(A + 1, A + la + 1, cmp);
  now = A[1].y - A[1].x;
  Max = A[1].y;
  for (i = 2; i <= la; i++) {
    Max = max(Max, A[i].x);
    if (A[i].y < Max) continue;
    now += A[i].y - Max;
    Max = A[i].y;
  }
  ans = now / (2 * PI);
  printf("%.10lf", ans);
  return 0;
}
