#include <bits/stdc++.h>
using namespace std;
long double INF = 1e100;
long double EPS = 1e-12;
long double pi = acos(-1.0);
long long X[100009], Y[100009], R[100009], UU[100009], VV[100009], EE[100009];
struct PT {
  long double x, y;
  PT() {}
  PT(long double x, long double y) : x(x), y(y) {}
  PT(const PT &p) : x(p.x), y(p.y) {}
  PT operator+(const PT &p) const { return PT(x + p.x, y + p.y); }
  PT operator-(const PT &p) const { return PT(x - p.x, y - p.y); }
  PT operator*(long double c) const { return PT(x * c, y * c); }
  PT operator/(long double c) const { return PT(x / c, y / c); }
};
vector<PT> TEMP;
vector<pair<long double, long double> > INTA;
long double dot(PT p, PT q) { return p.x * q.x + p.y * q.y; }
long double dist2(PT p, PT q) { return dot(p - q, p - q); }
long double cross(PT p, PT q) { return p.x * q.y - p.y * q.x; }
ostream &operator<<(ostream &os, const PT &p) {
  os << "(" << p.x << "," << p.y << ")";
}
PT RotateCCW90(PT p) { return PT(-p.y, p.x); }
PT RotateCW90(PT p) { return PT(p.y, -p.x); }
PT RotateCCW(PT p, long double t) {
  return PT(p.x * cos(t) - p.y * sin(t), p.x * sin(t) + p.y * cos(t));
}
vector<PT> CircleCircleIntersection(PT a, PT b, long double r, long double R) {
  vector<PT> ret;
  long double d = sqrt(dist2(a, b));
  if (d > r + R || d + min(r, R) < max(r, R)) return ret;
  long double x = (d * d - R * R + r * r) / (2 * d);
  long double y = sqrt(r * r - x * x);
  PT v = (b - a) / d;
  ret.push_back(a + v * x + RotateCCW90(v) * y);
  if (y > 0) ret.push_back(a + v * x - RotateCCW90(v) * y);
  return ret;
}
long double NORMA(long double val) {
  if (val > pi) val -= 2 * pi;
  if (val < -pi) val += 2 * pi;
  return val;
}
int main() {
  long long i, j, k, l, n, nn, mm, m;
  long long r, x0, y0, v, t;
  long double tot, val, val1, val2, ans, st, en, tt, ttt, rr;
  PT NOW;
  cin >> x0 >> y0 >> v >> t;
  cin >> n;
  for (i = 1; i <= n; i++) {
    cin >> X[i] >> Y[i] >> R[i];
    X[i] -= x0;
    Y[i] -= y0;
    UU[i] = X[i] * X[i] + Y[i] * Y[i];
    VV[i] = R[i] * R[i];
    EE[i] = UU[i] - VV[i];
  }
  if (v == 0 || t == 0) {
    for (i = 1; i <= n; i++) {
      if (UU[i] <= VV[i]) {
        cout << "1.000\n";
        return 0;
      }
    }
    cout << "0.000\n";
  } else {
    r = v * t;
    rr = r;
    rr *= r;
    for (i = 1; i <= n; i++) {
      if (R[i] == 0) continue;
      if (VV[i] >= UU[i]) {
        cout << "1.00\n";
        return 0;
      }
    }
    for (i = 1; i <= n; i++) {
      if (R[i] == 0) continue;
      if (EE[i] < rr || (fabs(EE[i] - rr) <= EPS)) {
        tt = acos(sqrt((EE[i] * 1.0) / UU[i]));
        ttt = atan2(Y[i], X[i]);
        val1 = ttt + tt;
        val2 = ttt - tt;
      } else {
        TEMP.clear();
        TEMP = CircleCircleIntersection(PT(0, 0), PT(X[i], Y[i]), r, R[i]);
        if (TEMP.size() < 2) continue;
        val1 = atan2(TEMP[0].y, TEMP[0].x);
        val2 = atan2(TEMP[1].y, TEMP[1].x);
      }
      val1 = NORMA(val1);
      val2 = NORMA(val2);
      if (val1 > val2) swap(val1, val2);
      if (val2 - val1 > pi) {
        INTA.push_back(make_pair(val2, pi));
        INTA.push_back(make_pair(-pi, val1));
      } else
        INTA.push_back(make_pair(val1, val2));
    }
    tot = 0;
    mm = INTA.size();
    if (mm == 0) {
      cout << "0.0000\n";
      return 0;
    }
    sort(INTA.begin(), INTA.end());
    st = INTA[0].first;
    en = INTA[0].second;
    for (i = 0; i < mm; i++) {
      if (INTA[i].first < en || fabs(INTA[i].first - en) <= EPS) {
        en = max(en, INTA[i].second);
      } else {
        tot += en - st;
        st = INTA[i].first;
        en = INTA[i].second;
      }
    }
    tot += en - st;
    ans = tot / (2 * pi);
    cout << fixed << setprecision(10) << ans << endl;
  }
}
