#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1.0);
struct Point {
  int x;
  int y;
  long long r;
};
Point tCenter, tPoint;
vector<pair<double, double> > vecP;
double CalcDis(const Point& tP1, const Point& tP2) {
  return sqrt(((tP1.x - tP2.x) * 1.0 * (tP1.x - tP2.x)) +
              ((tP1.y - tP2.y) * 1.0 * (tP1.y - tP2.y)));
}
void MakeTheta(double minAngle, double maxAngle) {
  if (minAngle < -PI) {
    vecP.push_back(make_pair(minAngle + PI * 2, PI));
    vecP.push_back(make_pair(-PI, maxAngle));
  } else if (maxAngle > PI) {
    vecP.push_back(make_pair(minAngle, PI));
    vecP.push_back(make_pair(-PI, maxAngle - PI * 2));
  } else {
    vecP.push_back(make_pair(minAngle, maxAngle));
  }
}
void Solve() {
  int v, t, n;
  bool bOk = false;
  cin >> tCenter.x >> tCenter.y >> v >> t >> n;
  tCenter.r = v * 1LL * t;
  for (int i = 0; i < n && !bOk; ++i) {
    cin >> tPoint.x >> tPoint.y >> tPoint.r;
    double dis = CalcDis(tCenter, tPoint);
    if (dis < tPoint.r + 1e-12)
      bOk = true;
    else if (dis > tPoint.r + tCenter.r + 1e-12)
      continue;
    else {
      double w = min(tCenter.r + 0.0, sqrt(((dis)*1.0 * (dis)) -
                                           ((tPoint.r) * 1.0 * (tPoint.r))));
      double theta = atan2(tPoint.y - tCenter.y, tPoint.x - tCenter.x);
      double angle = acos((((dis)*1.0 * (dis)) + ((w)*1.0 * (w)) -
                           ((tPoint.r) * 1.0 * (tPoint.r))) /
                          (2.0 * w * dis));
      MakeTheta(theta - angle, theta + angle);
    }
  }
  double totalAngle = 0, lastMaxAngle = -PI;
  if (!bOk) {
    vecP.push_back(make_pair(PI, PI));
    sort(vecP.begin(), vecP.end());
    for (int i = 0; i < vecP.size(); ++i) {
      if (vecP[i].second > lastMaxAngle) {
        totalAngle += max(0.0, vecP[i].first - lastMaxAngle);
        lastMaxAngle = vecP[i].second;
      }
    }
  }
  printf("%.6lf\n", 1.0 - totalAngle / (2 * PI));
}
int main() {
  Solve();
  return 0;
}
