#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef unsigned int uint; typedef unsigned long long ull; static const double EPS = 1e-9; static const double PI = acos(-1.0); #define REP(i, n) for (int i = 0; i < (int)(n); i++) #define FOR(i, s, n) for (int i = (s); i < (int)(n); i++) #define FOREQ(i, s, n) for (int i = (s); i <= (int)(n); i++) #define FORIT(it, c) for (__typeof((c).begin())it = (c).begin(); it != (c).end(); it++) #define MEMSET(v, h) memset((v), h, sizeof(v)) int sec = 1; int loop = 7 * 24 * 60 * sec; int s, n, t, w, d, p; int stage; char week[100]; char zone[1000]; bool match(int time) { int weekday = time / 24 / 60 / sec; int day = time % (24 * 60 * sec) / 60 / sec; if (day < 6 || 18 <= day) { day = 1; } else { day = 0; } return ((w >> weekday) & 1) && ((d >> day) & 1); } int main() { while (scanf("%d %d %d %s %s %d %d", &s, &n, &t, week, zone, &p, &stage) > 0 && s) { if (strcmp(week, "All") == 0) { w = (1 << 7) - 1; } else { w = 1 << 1; } if (strcmp(zone, "All") == 0) { d = 3; } if (strcmp(zone, "Day") == 0) { d = 1; } if (strcmp(zone, "Night") == 0) { d = 2; } double q = pow((p - 1.0) / p, n); double ans = -1e+100; FOR(start, 24 * 60 * sec - s, 24 * 60 * sec * 2) { double sump = 1.0; int time = start; REP(i, stage) { if (match(time) && match((time + s) % loop)) { sump *= q; } time = (time + t) % loop; } ans = max(ans, 1.0 - sump); } printf("%.10f\n", ans); } }