Problem:
I: Starting Line

ICPC で良い成績を収めるには修行が欠かせない．うさぎは ICPC で勝ちたいので，今日も修行をすることにした．

今日の修行は，一直線上の道を走って，体力と判断力を養おうというものである．うさぎは今，スタートラインに立って長い長い道を見渡している．

道の途中にはいくつかニンジンが置かれており，うさぎはニンジンを食べると加速することができる．加速していないときのうさぎの走る速さは毎秒 U メートルであるが，ニンジンを食べることで，最後のニンジンを食べてから T 秒後までは速さが毎秒 V メートルとなる．また，うさぎはニンジンを K 個まで食べずに持っておくことができる．ニンジンを持っていても走る速さは変わらない．

ニンジンを持ったり食べたりするのに時間はかからないとして，ゴールまでの最短所要時間を求めたい．

Input

N K T U V L
D1
...
DN

N はニンジンの個数，L はスタートからゴールまでの距離 (メートル)，Di (1 ≤ i ≤ N) は i 番目のニンジンが置かれている場所のスタートからの距離 (メートル) である．

1 ≤ N ≤ 200，1 ≤ K ≤ N，1 ≤ T ≤ 10,000，1 ≤ U < V ≤ 10,000，2 ≤ L ≤ 10,000，0 < D1 < D2 < ... < DN < L を満たす．入力の値はすべて整数である．

Output

最短所要時間 (秒) を 1 行に出力せよ．10-6 以下の絶対誤差が許容される．

Sample Input 1

1 1 1 2 3 100
50

Sample Output 1

49.500000000

Sample Input 2

3 1 1 2 3 100
49
50
51

Sample Output 2

48.666666667

Solution in JAVA (judge verdict: Accepted)

import java.util.Scanner;

public class Main {

	static Scanner sc = new Scanner(System.in);

	public static void main(String[] arg) {
		int N = sc.nextInt();
		int K = sc.nextInt();
		int T = sc.nextInt();
		int U = sc.nextInt();
		int V = sc.nextInt();
		int L = sc.nextInt();
		int[] D = new int[N];
		for (int i = 0; i < N; ++i) {
			D[i] = sc.nextInt();
		}
		int pos = 0;
		double time = 0;
		double dist = 0;
		double bootEnd = -1;
		int carrot = 0;
		while (true) {
			if (bootEnd < 0) {
				if (carrot > 0) {
					--carrot;
					bootEnd = dist + T * V;
				} else {
					if (pos < N) {
						time += (D[pos] - dist) / U;
						dist = D[pos];
						++pos;
						++carrot;
					} else {
						time += (L - dist) / U;
						break;
					}
				}
			} else {
				if (pos < N) {
					if (bootEnd < D[pos]) {
						time += (bootEnd - dist) / V;
						dist = bootEnd;
						bootEnd = -1;
					} else {
						time += (D[pos] - dist) / V;
						dist = D[pos];
						if (carrot == K) {
							bootEnd = D[pos] + T * V;
						} else {
							++carrot;
						}
						++pos;
					}
				} else {
					if (bootEnd < L) {
						time += (bootEnd - dist) / V;
						dist = bootEnd;
						bootEnd = -1;
					} else {
						time += (L - dist) / V;
						break;
					}
				}
			}
		}
		System.out.println(time);
	}

}