#include <bits/stdc++.h>
using namespace std;
const int maxn = 100010;
const long double eps = 1e-15, pi = acos(-1.0);
int N;
long double R[maxn], V, T;
inline int dcmp(long double a) {
  if (-eps <= a && a <= eps)
    return 0;
  else if (a > 0)
    return 1;
  else
    return -1;
}
inline int gi() {
  char ch;
  int ret = 0, f = 1;
  do ch = getchar();
  while (!(ch >= '0' && ch <= '9') && ch != '-');
  if (ch == '-') f = -1, ch = getchar();
  do ret = ret * 10 + ch - '0', ch = getchar();
  while (ch >= '0' && ch <= '9');
  return ret * f;
}
struct Point {
  long double x, y;
  inline Point() = default;
  inline Point(long double _x, long double _y) : x(_x), y(_y) {}
  inline void read() { x = gi(), y = gi(); }
  inline Point unit() const {
    long double len = norm();
    return Point(x / len, y / len);
  }
  inline long double angle() const { return atan2(y, x); }
  inline long double norm() const { return sqrt(x * x + y * y); }
  friend inline Point operator+(const Point &a, const Point &b) {
    return Point(a.x + b.x, a.y + b.y);
  }
  friend inline Point operator-(const Point &a, const Point &b) {
    return Point(a.x - b.x, a.y - b.y);
  }
  friend inline Point operator*(const Point &a, long double b) {
    return Point(a.x * b, a.y * b);
  }
  friend inline Point operator*(long double b, const Point &a) {
    return Point(a.x * b, a.y * b);
  }
  friend inline Point operator/(const Point &a, long double b) {
    return Point(a.x / b, a.y / b);
  }
} P, O[maxn];
inline Point rotate(const Point &p, long double cost, long double sint) {
  long double x = p.x, y = p.y;
  return Point(x * cost - y * sint, x * sint + y * cost);
}
inline pair<Point, Point> crosspoint(const Point &ap, long double ar,
                                     const Point &bp, long double br) {
  long double d = (ap - bp).norm();
  long double cost = (ar * ar + d * d - br * br) / (2 * ar * d),
              sint = sqrt(1 - cost * cost);
  Point v = ((bp - ap) / (bp - ap).norm()) * ar;
  return make_pair(ap + rotate(v, cost, -sint), ap + rotate(v, cost, sint));
}
inline long double work() {
  vector<pair<long double, long double> > vec;
  for (int i = 1; i <= N; ++i) {
    long double s = (P - O[i]).norm();
    if (dcmp(s - R[i]) <= 0)
      return 1.0;
    else if (dcmp(s - R[i] - T * V) >= 0)
      continue;
    long double t = sqrt(s * s - R[i] * R[i]), mid = (O[i] - P).angle(), delta;
    if (dcmp(t - V * T) <= 0)
      delta = asin(R[i] / s);
    else
      delta = acos((V * V * T * T + s * s - R[i] * R[i]) / (2 * V * T * s));
    long double alpha = mid - delta, beta = mid + delta;
    if (beta > pi) beta -= 2 * pi;
    if (alpha < -pi) alpha += 2 * pi;
    if (beta < alpha)
      vec.push_back(make_pair(alpha, pi)), vec.push_back(make_pair(-pi, beta));
    else
      vec.push_back(make_pair(alpha, beta));
  }
  sort(vec.begin(), vec.end());
  long double sum = 0;
  for (int i = 0, j; i < (int)vec.size(); i = j) {
    long double r = vec[i].second;
    for (j = i + 1; j < (int)vec.size() && vec[j].first <= r; ++j)
      r = max(vec[j].second, r);
    sum += r - vec[i].first;
  }
  return sum / 2 / pi;
}
int main() {
  P.read();
  V = gi();
  T = gi();
  N = gi();
  for (int i = 1; i <= N; ++i) O[i].read(), R[i] = gi();
  cout << fixed << setprecision(8) << work() << endl;
  return 0;
}
