#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-9;
const double pi = acos(-1.0);
long long in() {
  long long re = 0, f = 1;
  char x = getchar();
  while (x < '0' || x > '9') {
    if (x == '-') f = -1;
    x = getchar();
  }
  while (x >= '0' && x <= '9') re = re * 10 + x - 48, x = getchar();
  return re * f;
}
void out(long long x) {
  if (x < 0) putchar('-'), x = -x;
  if (!x) {
    putchar('0');
    return;
  }
  char z[21], ct = 0;
  while (x) {
    z[++ct] = x % 10 + 48, x /= 10;
  }
  while (ct) {
    putchar(z[ct]);
    --ct;
  }
}
int sign(double x) { return (x > eps) - (x < -eps); }
double msqrt(double x) { return sign(x) > 0 ? sqrt(x) : 0; }
struct point {
  double x, y;
  void scan() { scanf("%lf%lf", &x, &y); }
  point operator+(const point &b) const { return (point){x + b.x, y + b.y}; }
  point operator-(const point &b) const { return (point){x - b.x, y - b.y}; }
  point operator*(const double b) const { return (point){x * b, y * b}; }
  point operator/(const double b) const { return (point){x / b, y / b}; }
  double len() const { return msqrt(x * x + y * y); }
  point unit() const {
    double l = len();
    point tmp = (point){x / l, y / l};
    return tmp;
  }
  point rotate(double ang) const {
    double X, Y;
    X = cos(ang) * x - sin(ang) * y;
    Y = cos(ang) * y + sin(ang) * x;
    return (point){X, Y};
  }
  point turn90() const { return (point){-y, x}; }
  void print() { printf("[%.3lf %.3lf]\n", x, y); }
  double ang() { return atan2(y, x); }
};
struct line {
  point a, b;
  void scan() {
    a.scan();
    b.scan();
  }
};
struct circle {
  point o;
  double r;
};
double dot(const point &a, const point &b) { return a.x * b.x + a.y * b.y; }
double det(const point &a, const point &b) { return a.x * b.y - a.y * b.x; }
double dis(point a, point b) {
  return msqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
double dis2(point a, point b) {
  return (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y);
}
bool isLL(const line &l1, const line &l2, point &p) {
  double s1 = det(l2.b - l2.a, l1.a - l2.a);
  double s2 = -det(l2.b - l2.a, l1.b - l2.a);
  if (!sign(s1 + s2)) return 0;
  p = (l1.a * s2 + l1.b * s1) / (s1 + s2);
  return 1;
}
bool isCC(circle a, circle b, point &p1, point &p2) {
  double s1 = (a.o - b.o).len();
  if (sign(s1 - a.r - b.r) > 0 || sign(s1 - fabs(a.r - b.r)) < 0) return 0;
  double s2 = (a.r * a.r - b.r * b.r) / s1;
  double aa = (s1 + s2) * 0.5, bb = (s1 - s2) * 0.5;
  point o = (b.o - a.o) * (aa / (aa + bb)) + a.o;
  point delta = (b.o - a.o).unit().turn90() * msqrt(a.r * a.r - aa * aa);
  p1 = o + delta;
  p2 = o - delta;
  return 1;
}
int n, ptr;
int X, Y;
double v, T, R;
struct data {
  double l, r;
  bool operator<(const data &b) const { return l < b.l; }
} d[200010];
int main() {
  scanf("%d%d%lf%lf", &X, &Y, &v, &T);
  R = v * T;
  n = in();
  point O = (point){0, 0};
  circle C = (circle){O, R};
  for (int i = 1; i <= n; ++i) {
    int xx, yy, rr;
    double x, y, _r;
    scanf("%d%d%d", &xx, &yy, &rr);
    xx -= X;
    yy -= Y;
    x = 1.0 * xx;
    y = 1.0 * yy;
    _r = 1.0 * rr - 1e-7;
    circle c = (circle){(point){x, y}, _r};
    if (1ll * xx * xx + 1ll * yy * yy <= 1ll * rr * rr) {
      puts("1.0");
      return 0;
    }
    point p1, p2;
    C.r = min(R, msqrt(dis2(C.o, c.o) - c.r * c.r));
    if (isCC(C, c, p1, p2)) {
      double l = p1.ang() + pi, r = p2.ang() + pi;
      if (l > r) swap(l, r);
      if (r - l <= pi)
        d[++ptr] = (data){l, r};
      else {
        d[++ptr] = (data){r, pi * 2};
        d[++ptr] = (data){0, l};
      }
    }
  }
  sort(d + 1, d + ptr + 1);
  double lst = 0, ext = 0, ang = 0;
  for (int i = 1; i <= ptr; ++i) {
    if (d[i].l > ext) {
      ang += ext - lst;
      ext = d[i].r;
      lst = d[i].l;
    } else
      ext = max(ext, d[i].r);
  }
  ang += ext - lst;
  printf("%.7lf\n", ang / (pi * 2));
}
