import std.stdio;
import std.ascii;
import std.range;
import std.array;
import std.functional;
import std.algorithm;
import std.conv;
import std.container;
import std.math;
import std.numeric;
import std.string;
import std.c.string;
import std.regex;
import std.typecons;

struct E {
    double dist;
    int type; // 0: K++, 1: K--
}

void main() {
    const INF = 1e9;
    int N, K, T, U, V, L;
    scanf("%d %d %d %d %d %d\n", &N, &K, &T, &U, &V, &L);
    auto D = new double[N + 1];
    D[N] = L;
    foreach (i; 0 .. N) scanf("%lf\n", &D[i]);
    int rK = 0;
    int i = 0;
    double time = 0;
    double dist = 0;
    double ndist = INF; // 繝九Φ繧ク繝ウ蛻?ｌdistance
    bool fast = false;
    while (true) {
        //writeln([i, dist, ndist, time, rK]);
        if (!fast) {
            assert(rK == 0);
            time += (D[i] - dist) / U;
            dist = D[i];
            if (i == N) break;
            i++;
            fast = true;
            ndist = dist + V * T;
        } else if (D[i] < ndist) {
            time += (D[i] - dist) / V;
            dist = D[i];
            if (i == N) break;
            i++;
            if (rK == K) {
                ndist = dist + V * T;
            } else {
                rK++;
            }
        } else {
            time += (ndist - dist) / V;
            dist = ndist;
            if (rK == 0) {
                fast = false;
            } else {
                rK--;
                ndist = dist + V * T;
            }
        }
    }
    writefln("%.10f", time);
}