Problem: There is a game called Sim Forest 2013. In this game, the player can become a forest god and raise forest animals.

Animals hatch from eggs and breed. When certain conditions are met, eggs are mutated with a certain probability to give birth to new races of animals.

There is an animal encyclopedia in this game, and when you get a new kind of animal, it will be recorded in the animal dictionary.

Mori is an enthusiastic player of Sim Forest 2013. His animal dictionary is complete when the remaining one race is filled.

Mori decided to obtain this remaining one race by mutation from the egg.

The game progress is as follows.

* N eggs will appear at the beginning of the stage.
* N eggs hatch s minutes after the start of the stage.
* Each egg has a 1 / p chance of targeting on a specific day of the week and within a specific time zone during the entire period * from appearance to hatching * (including the time of appearance and the moment of hatching). Mutates in animals.
* The stage ends t minutes after the start of the stage, and the same stage starts immediately after that (starts with n eggs. The elapsed time is not reset).
* The stage is repeated m times in a row.



This game meets the following specifications.

* Animals born from eggs do not lay eggs.
* Eggs hatch only once per stage, s minutes after the start of the stage.
* Mr. Sori can set the start day and start time of the first stage as desired. (The start time of the second and subsequent stages will be immediately after the end of the previous stage)
* One of {all days, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday} is given as a mutable day.
* One of {all time zones, morning, night} is given as a mutable time zone.



Inputs are s, n, t, mutable day / time zone, p, m. Find the probability when you set the start day and start time of the first stage so that the probability of mutation occurring by the end of all stages is maximized.

Input

The input consists of multiple datasets. Each dataset is given in the following format:


s n t weekday time p m


Each dataset shows the time it takes for an egg to hatch from the start of the stage s, the number of eggs that appear at the start of the stage n, the time it takes to finish one stage t, the mutable day weekday, the mutable Time zone time, reciprocal of mutation probability p (mutation probability is 1 / p), total number of stages m.

The input satisfies the following constraints.

* 0 <s <= 500
* 0 <n <= 100
* s <t <= 1000
* weekday ∈ {All, Sun, Mon, Tue, Wed, Thu, Fri, Sat}
* All means all days of the week
* time ∈ {All, Day, Night}
* All means [0: 00 ~ 24: 00), Day means [6: 00 ~ 18: 00), and Night means [18: 00 ~ 6: 00).
* 1 <= p <= 99999
* 1 <= m <= 100



The end of the input is given on the following line.


0 0 0 None None 0 0


Output

For each dataset, output the probability when the start day and start time of the first stage is set so that the probability of mutation occurring by the end of all stages is maximized. The error in the answer must not exceed 0.00000001 (10-8). Any number of digits after the decimal point may be output as long as the precision conditions are met.

Sample Input


1 1 3 All All 1 1
2 37 5 All Night 150 1
16 2 20 All Day 5 10
1 14 15 Mon All 20000 100
0 0 0 None None 0 0


Output for Sample Input


1.0000000000
0.2192439716
0.9884707850
0.0649933899






Example

Input

1 1 3 All All 1 1
2 37 5 All Night 150 1
16 2 20 All Day 5 10
1 14 15 Mon All 20000 100
0 0 0 None None 0 0


Output

1.0000000000
0.2192439716
0.9884707850
0.0649933899

Solution (in CPP):

Solution:
#include <stdio.h>
#include <cmath>
#include <algorithm>
#include <cfloat>
#include <stack>
#include <queue>
#include <vector>
#include <string>
#include <iostream>
#include <set>
#include <map>
#include <time.h>
typedef long long int ll;
typedef unsigned long long int ull;
#define BIG_NUM 2000000000
#define MOD 1000000007
#define EPS 0.000000001
using namespace std;

#define day_start 360
#define day_end 1080
#define one_day 1440


char can_weekday[10],can_time[10];
int egg_time,num_egg,stage_time,NUM,num_stage;
bool ok_week[7];

bool is_OK(int weekday,int time,int add_time){

	if(!ok_week[weekday])return false;

	int start_time = time,start_day = weekday;
	int end_time,end_day;
	end_time = start_time+add_time;

	if(end_time >= one_day){
		end_time -= one_day;
		end_day = weekday+1;
		end_day %= 7;
	}else{
		end_day = weekday;
	}

	switch(can_time[0]){
	case 'A':
		return ok_week[end_day];
	case 'D':
		if(start_time < day_start || start_time >= day_end)return false;
		if(end_time < day_start || end_time >= day_end)return false;
		if(end_day != start_day)return false;

		return true;
	case 'N':
		if(start_time >= day_start && start_time < day_end)return false;
		if(end_time >= day_start && end_time < day_end)return false;

		if(start_time >= day_end){
			if(ok_week[end_day] == false)return false;
		}else{ //start_time < day_start
			if(end_time > day_end || start_day != end_day)return false;
		}
		return true;
	}
}

void func(){

	//孵化可能な曜日を設定する
	for(int i = 0; i < 7; i++)ok_week[i] = false;

	switch(can_weekday[0]){
	case 'A':
		for(int i = 0; i < 7; i++)ok_week[i] = true;
		break;
	case 'S':
		if(can_weekday[1] == 'u'){ //日曜
			ok_week[0] = true;
		}else{
			ok_week[6] = true;
		}
		break;
	case 'M':
		ok_week[1] = true;
		break;
	case 'T':
		if(can_weekday[1] == 'u'){
			ok_week[2] = true;
		}else{
			ok_week[4] = true;
		}
		break;
	case 'W':
		ok_week[3] = true;
		break;
	case 'F':
		ok_week[5] = true;
		break;
	}

	double P = 1.0/(double)NUM;
	double all_NOT = pow(1.0-P,num_egg); //孵化可能な状態で、全ての卵が孵化しない確率
	double ans = 0.0,tmp_sum;

	int day,current_time;

	for(int start_day = 0; start_day < 7; start_day++){
		for(int start_time = 0; start_time < one_day; start_time++){

			tmp_sum = 1.0;
			day = start_day;
			current_time = start_time;

			for(int i = 0; i < num_stage; i++){

				if(is_OK(day,current_time,egg_time)){
					tmp_sum *= all_NOT;
				}

				current_time += stage_time;
				if(current_time >= one_day){
					day++;
					day %= 7;
					current_time -= one_day;
				}
			}
			ans = max(ans,1.0-tmp_sum);
		}
	}
	printf("%.10lf\n",ans);
}

int main(){

	while(true){
		scanf("%d %d %d %s %s %d %d",&egg_time,&num_egg,&stage_time,can_weekday,can_time,&NUM,&num_stage);
		if(egg_time == 0)break;

		func();
	}

	return 0;
}