Problem: Training is indispensable for achieving good results at ICPC. Rabbit wants to win at ICPC, so he decided to practice today as well.

Today's training is to develop physical strength and judgment by running on a straight road. The rabbit is now standing at the starting line and looking out over a long, long road.

There are some carrots along the way, and rabbits can accelerate by eating carrots. Rabbits run at U meters per second when not accelerating, but by eating carrots, the speed is V meters per second from the last carrot eaten to T seconds later. Rabbits can also carry up to K carrots without eating them. Even if you have a carrot, the running speed does not change.

Assuming that it does not take long to bring and eat carrots, I would like to find the shortest time required to reach the goal.



Input


N K T U V L
D1
...
DN


N is the number of carrots, L is the distance from the start to the goal (meters), and Di (1 ≤ i ≤ N) is the distance from the start where the i-th carrot is located (meters).

1 ≤ N ≤ 200, 1 ≤ K ≤ N, 1 ≤ T ≤ 10,000, 1 ≤ U <V ≤ 10,000, 2 ≤ L ≤ 10,000, 0 <D1 <D2 <... <DN <L. All input values ​​are integers.

Output

Output the shortest required time (seconds) on one line. Absolute errors of 10-6 or less are allowed.

Examples

Input

1 1 1 2 3 100
50


Output

49.500000000


Input

3 1 1 2 3 100
49
50
51


Output

48.666666667

Solution (in CPP):

Solution:
#include <iostream>
#include <cstdio>
#include <vector>
#include <map>
#include <queue>
#include <algorithm>
using namespace std;

// l:距離, v:速さ, かかる時間を返す.
double f(double l, double v){
	return l / v;
}

typedef pair<double,int> P;
const int CARROT = 1;
const int SLOW = 2;
const int GOAL = 3;

int main(){
	int N, K, T, U, V, L;
	scanf("%d %d %d %d %d %d", &N, &K, &T, &U, &V, &L);
	
	vector<int> D(N);
	priority_queue<P, vector<P>, greater<P> > q;
	q.push( P(L,GOAL) );
	for(int i=0 ; i < N ; i++ ){
		scanf("%d", &D[i]);
		q.push( P(D[i],CARROT) );
	}
	
	double x=0.0, v = U, t=0.0, k=0, carrot=0;
	while( !q.empty() ){
		if( q.top().second == CARROT ){ // 次の位置がニンジンのとき
			double l = q.top().first - x; // 移動する距離
			x = q.top().first; // 次の位置
			t += f(l,v); // 時間経過
			q.pop();
			
			if( v == U ){ // 通常の速さのとき(ニンジンを食べる)
				v = V; // 速度変化
				q.push( P(x + V*T, SLOW) ); // ニンジンの効果が切れる位置
			}else{ // 速いとき
				if( k < K ){ // ニンジンを持てるとき(持つ)
					k++;
				}else{ // ニンジンを持てないとき(食べる)
					carrot++;
					q.push( P(x + V*T, SLOW) ); // ニンジンの効果が切れる位置
				}
			}
		}else if( q.top().second == SLOW ){ // ニンジンの効果が切れるとき
			double l = q.top().first - x; // 移動する距離
			x = q.top().first; // 次の位置
			t += f(l,v); // 時間経過
			q.pop();
			
			if( carrot > 0 ){ // ニンジンを効果が切れる前に食べたときは遅くならない
				carrot--;
			}else if( k > 0 ){ // ニンジンを持っているときは即座に食べる
				k--;
				q.push( P(x + V*T, SLOW) ); // ニンジンの効果が切れる位置
			}else{ // 通常の速さに戻る
				v = U;
			}
		}else if( q.top().second == GOAL ){ // ゴールのとき
			double l = q.top().first - x; // 移動する距離
			x = q.top().first; // 次の位置
			t += f(l,v); // 時間経過
			q.pop();
			break;
		}
	}
	printf("%.9f\n", t);
}