#include <bits/stdc++.h>
using namespace std;
double sq_distance(double x0, double y0, double x1, double y1) {
  double dx = x1 - x0;
  double dy = y1 - y0;
  return dx * dx + dy * dy;
}
bool contains(double x0, double y0, double x1, double y1, double r1) {
  return sq_distance(x0, y0, x1, y1) <= r1 * r1;
}
bool tangent(double x0, double y0, double r0, double x1, double y1, double r1,
             pair<double, double> &angles) {
  double sq_d = sq_distance(x0, y0, x1, y1);
  double sq_tan_length = sq_d - (r1 * r1);
  if (sq_tan_length > r0 * r0) {
    return false;
  } else {
    double dx = x1 - x0;
    double dy = y1 - y0;
    double d = sqrt(sq_d);
    double t = asin(r1 / d);
    double angle = atan2(dy, dx);
    if (angle < 0) {
      angle += (2 * M_PI);
    }
    angles = make_pair(angle - t, angle + t);
    return true;
  }
}
bool intersection(double x0, double y0, double r0, double x1, double y1,
                  double r1, pair<double, double> &angles) {
  double d = sqrt(sq_distance(x0, y0, x1, y1));
  if (d < 1e-9 || r0 < 1e-9 || abs(r1 - r0) > d + 1e-9 || r0 + r1 < d - 1e-9) {
    return false;
  } else {
    double dx = x1 - x0;
    double dy = y1 - y0;
    double s = (r0 * r0 + d * d - r1 * r1) / (2 * r0 * d);
    double t = acos(max(-1.0, min(1.0, s)));
    if (abs(sin(t)) < 1e-9) {
      return false;
    } else {
      double angle = atan2(dy, dx);
      if (angle < 0) {
        angle += (2 * M_PI);
      }
      angles = make_pair(angle - t, angle + t);
      return true;
    }
  }
}
vector<pair<double, double> > thetas;
double first_theta = 2 * M_PI;
double last_theta = 0;
void generate_thetas(double x0, double y0, pair<double, double> &angles) {
  if (angles.first < 0) {
    thetas.push_back(make_pair(angles.first + (2 * M_PI), (2 * M_PI)));
    thetas.push_back(make_pair(0, angles.second));
    first_theta = 0;
    last_theta = (2 * M_PI);
  } else if (angles.second >= (2 * M_PI)) {
    thetas.push_back(make_pair(angles.first, (2 * M_PI)));
    thetas.push_back(make_pair(0, angles.second - (2 * M_PI)));
    first_theta = 0;
    last_theta = (2 * M_PI);
  } else {
    thetas.push_back(angles);
    first_theta = min(first_theta, angles.first);
    last_theta = max(last_theta, angles.second);
  }
}
int main() {
  ios::sync_with_stdio(false);
  int x0, y0, v, T;
  cin >> x0 >> y0 >> v >> T;
  double r0 = double(v) * T;
  int n;
  cin >> n;
  bool whole_circle = false;
  for (int i = 0; i < n; i++) {
    int x, y, r;
    cin >> x >> y >> r;
    if (contains(x0, y0, x, y, r)) {
      whole_circle = true;
      break;
    }
    pair<double, double> angles;
    if (tangent(x0, y0, r0, x, y, r, angles)) {
      generate_thetas(x0, y0, angles);
    } else if (intersection(x0, y0, r0, x, y, r, angles)) {
      generate_thetas(x0, y0, angles);
    }
  }
  if (whole_circle) {
    cout << 1.0 << endl;
  } else if (thetas.size() == 0) {
    cout << 0.0 << endl;
  } else {
    double ans = (2 * M_PI);
    sort(thetas.begin(), thetas.end());
    double farthest_end = thetas[0].second;
    for (int i = 1; i < thetas.size(); i++) {
      if (thetas[i].first > farthest_end) {
        ans -= thetas[i].first - farthest_end;
      }
      farthest_end = max(farthest_end, thetas[i].second);
    }
    ans -= first_theta;
    ans -= ((2 * M_PI) - last_theta);
    cout << ans / (2 * M_PI) << endl;
  }
  return 0;
}
