#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
int x[N], y[N], r[N], X0, Y0, tot, n;
long long v, t;
bool pd = false;
double ans;
const double pi = acos(-1);
int dcmp(double x) {
  if (fabs(x) < 1e-10)
    return 0;
  else if (x >= 1e-10)
    return 1;
  else
    return -1;
}
double sqr(double x) { return x * x; }
struct Point {
  double l, r;
} p[2 * N];
bool cmp(Point a, Point b) { return dcmp(a.l - b.l) < 0; }
int main() {
  scanf("%d%d%I64d%I64d", &X0, &Y0, &v, &t);
  long long d = v * t;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d%d%d", x + i, y + i, r + i);
    double dis = sqrt(sqr(x[i] - X0) + sqr(y[i] - Y0));
    if (dcmp(dis - r[i]) <= 0) {
      pd = true;
      break;
    }
    if (dcmp(dis - d - r[i]) >= 0) continue;
    double dis1 = sqrt(sqr(dis) - sqr(r[i]));
    double ang, ang2;
    if (dcmp(dis1 - d) <= 0) {
      ang = acos((double)(x[i] - X0) / (dis));
      ang2 = acos(dis1 / dis);
      if (y[i] < Y0) ang = 2 * pi - ang;
    } else {
      ang = acos((double)(x[i] - X0) / (dis));
      ang2 = acos((sqr(d) + sqr(dis) - sqr(r[i])) / (2 * d * dis));
      if (y[i] < Y0) ang = 2 * pi - ang;
    }
    if (dcmp(ang - ang2) < 0) {
      p[tot++].l = ang - ang2 + 2 * pi;
      p[tot - 1].r = 2 * pi;
      p[tot++].l = 0;
      p[tot - 1].r = ang + ang2;
    } else if (dcmp(ang + ang2 - 2 * pi) > 0) {
      p[tot++].l = ang - ang2;
      p[tot - 1].r = 2 * pi;
      p[tot++].l = 0;
      p[tot - 1].r = ang + ang2 - 2 * pi;
    } else {
      p[tot++].l = ang - ang2;
      p[tot - 1].r = ang + ang2;
    }
  }
  sort(p, p + tot, cmp);
  double now = 0;
  for (int i = 0; i < tot; i++) {
    if (dcmp(now - p[i].r) >= 0) continue;
    ans += p[i].r - max(p[i].l, now);
    now = p[i].r;
  }
  ans = ans / (2 * pi);
  if (pd)
    printf("1.0000000\n");
  else
    printf("%.10lf\n", ans);
  return 0;
}
