#include #include #include #include #include #include #include #define REP(i,x) for(int i=0 ; i<(int)(x) ; i++) #define LL long long #define ALL(x) (x).begin(),(x).end() using namespace std; const double INF = 1e50; const double EPS = 1e-9; int N,K,T,U,V,L; int sum[10002]; int dPos[10001]; double dp[10001][201]; int main(){ while(cin>>N>>K>>T>>U>>V>>L){ vector D; memset(dPos,0,sizeof(dPos)); REP(i,N){ int d;cin>>d; D.push_back(d); dPos[d] = 1; } // [,) memset(sum,0,sizeof(sum)); REP(i,L+1){ if(i==0){ sum[i] = 0; } else{ sum[i] = sum[i-1]+dPos[i]; } } // debug //REP(i,L+1)cout << sum[i] << " "; //cout << endl; REP(l,L+1)REP(k,K+1)dp[l][k] = INF; dp[0][0] = 0; REP(l,L){ REP(k,K+1){ // U[m/s]‚Ĺ1[m]•ŕ‚­ double walk = 1./U; dp[l+1][k] = min(dp[l][k]+walk,dp[l+1][k]); if(k>0 || dPos[l]==1){ // T•bVdedash int dist = T*V; if(l+dist>L)dist = L-l; // dist m dash double dash = dist*1./V; int cnt = sum[l+dist-1]-sum[l]; int kk = k-1+cnt; if(dPos[l]==1)kk++; kk = min(K,kk); dp[l+dist][kk] = min(dp[l][k]+dash,dp[l+dist][kk]); vector::iterator it = upper_bound(ALL(D),l); for(;it!=D.end() ; it++){ int cPos = *it; int cDist = cPos-l; if(cDist>dist)break; double cDash = cDist*1./V; int cCnt = sum[l+cDist-1]-sum[l]; int cKK = k-1+cCnt; if(dPos[l]==1)cKK++; cKK = min(K,cKK); dp[l+cDist][cKK] = min(dp[l][k]+cDash,dp[l+cDist][cKK]); } } } } REP(k,K+1){ //REP(l,L+1)cout << dp[l][k] << " "; //cout << endl; } double res = INF; REP(k,K+1)res = min(res,dp[L][k]); printf("%.12f\n",res); } return 0; }