#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-12;
const double pi = acos(-1.0);
struct point {
  long double x, y;
  point() {}
  point(long double x, long double y) : x(x), y(y) {}
};
point operator+(const point& p1, const point& p2) {
  return point(p1.x + p2.x, p1.y + p2.y);
}
point operator-(const point& p1, const point& p2) {
  return point(p1.x - p2.x, p1.y - p2.y);
}
point operator*(const point& p1, long double d) {
  return point(p1.x * d, p1.y * d);
}
point operator/(const point& p1, long double d) {
  return point(p1.x / d, p1.y / d);
}
long double sqr(long double x) { return x * x; }
double sqr(double x) { return x * x; }
long long sqr(int x) { return 1LL * x * x; }
int dcmp(long double x) { return fabs(x) <= eps ? 0 : (x > 0 ? 1 : -1); }
point Rev(point p) { return point(-p.y, p.x); }
long double Dot(point p) { return sqr(p.x) + sqr(p.y); }
struct cir {
  int x, y, r;
  cir() {}
  cir(int x, int y, int r) : x(x), y(y), r(r) {}
};
long double Area(long double a, long double b, long double c) {
  long double p = (a + b + c) / 2.;
  return sqrt(p * (p - a) * (p - b) * (p - c));
}
pair<point, point> inter(const cir& p2, long double R) {
  long double a = sqrt((long double)(sqr(p2.x) + sqr(p2.y))), b = R,
              c = (long double)p2.r;
  if (dcmp(b + c - a) <= 0) return make_pair(point(0., 1.), point(0., 1.));
  long double S = Area(a, b, c);
  long double h = 2. * S / a;
  long double tmp = sqrt(sqr(b) - sqr(h));
  point v = point(p2.x * 1., p2.y * 1.);
  v = v / a;
  point p3 = v * tmp + Rev(v) * h;
  point p4 = v * tmp - Rev(v) * h;
  return make_pair(p3, p4);
}
double dx, dy, v, T;
int n;
cir p[200001];
pair<double, double> a[200001], b[200001];
int main() {
  int dxx, dyy, vv, TT;
  scanf("%d %d %d %d", &dxx, &dyy, &vv, &TT);
  v = (double)vv, T = (double)TT;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    int xx, yy, rr;
    scanf("%d %d %d", &p[i].x, &p[i].y, &p[i].r);
    p[i].x -= dxx, p[i].y -= dyy;
  }
  bool ok = false;
  for (int i = 1; i <= n; i++) {
    long double dist = sqrt((long double)(sqr(p[i].x) + sqr(p[i].y)));
    if (sqr(p[i].x) + sqr(p[i].y) - sqr(p[i].r) <= 0) {
      ok = true;
      break;
    }
    long double tmp =
        sqrt((long double)(sqr(p[i].x) + sqr(p[i].y) - sqr(p[i].r)));
    long double h = tmp * p[i].r / dist;
    point o =
        point(p[i].x * 1., p[i].y * 1.) *
        sqrt((long double)(sqr(p[i].x) + sqr(p[i].y) - sqr(p[i].r) - sqr(h)));
    point p1 = point(-p[i].y * 1., p[i].x * 1.) * h + o;
    point p2 = o - point(-p[i].y * 1., p[i].x * 1.) * h;
    if (dcmp(sqrt(Dot(p1)) - v * T * dist) <= 0)
      a[i] = make_pair(atan2(p1.y, p1.x), atan2(p2.y, p2.x));
    else {
      pair<point, point> tmp = inter(p[i], v * T);
      p1 = tmp.first, p2 = tmp.second;
      a[i] = make_pair(atan2(p1.y, p1.x), atan2(p2.y, p2.x));
    }
  }
  if (ok)
    printf("1.000000000\n");
  else {
    int N = 0;
    for (int i = 1; i <= n; i++) {
      double x = a[i].first, y = a[i].second;
      if (x > y) swap(x, y);
      x += pi, y += pi;
      if (dcmp(y - x - pi) <= 0)
        b[++N] = make_pair(x, y);
      else
        b[++N] = make_pair(y, 2 * pi), b[++N] = make_pair(0., x);
    }
    sort(b + 1, b + 1 + N);
    double maxR = 0., ans = 0.;
    for (int i = 1; i <= N; i++) {
      double x = b[i].first, y = b[i].second;
      if (dcmp(x - maxR) <= 0) {
        ans += max(y - maxR, 0.);
        maxR = max(maxR, y);
      } else {
        ans += y - x;
        maxR = max(maxR, y);
      }
    }
    printf("%.9f\n", ans / (2. * pi));
  }
  return 0;
}
