#pragma comment(linker, "/STACK:60000000")
#define _CRT_SECURE_NO_WARNINGS

#include <cstdio>
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
#include <string>
#include <set>
#include <map>
#include <ctime>
#include <cstring>
#include <cassert>
#include <sstream>
#include <iomanip>
#include <complex>
#include <queue>
#include <functional>

using namespace std;

#define forn(i, n) for(int i = 0; i < (int)(n); i++)
#define ford(i, n) for(int i = (int)(n) - 1; i >= 0; i--)
#define pb push_back
#define mp make_pair
#define fs first
#define sc second
#define last(a) int(a.size() - 1)
#define all(a) a.begin(), a.end()
#define seta(a,x) memset (a, x, sizeof (a))
#define I (int)
#define norm(a) sort(all(a)), a.erase(unique(all(a)), a.end())
#define num(a,x) (int)(lower_bound(all(a), x) - a.begin())

typedef long long int64;
typedef pair <long long, long long> pii;
typedef long double ldb;

const long double eps = 1e-7;
const int inf = (1 << 30) - 1;
const int64 inf64 = ((int64)1 << 62) - 1;
const long double pi = 3.1415926535897932384626433832795;
const string task = "tram";

template <class T> T sqr (T x) {return x * x;}

const int nmax = 2100;

int n, T, k, v, w;
int a[nmax];
double t[nmax][nmax], beg[nmax];
int p[nmax][nmax];
double res;
vector<int> path;

double wait(double cur){
	int w = cur / T;
	while (w * T * 1.0 + eps < cur) w ++;
	return w * T - cur;
}

void solve(){
	forn(i,n)
		beg[i] = 1.0 * (a[i] - a[0]) / v;
	forn(i,nmax)
		forn(j,nmax)
			t[i][j] = inf;
	t[0][0] = 0;
	forn(i,n-1)
		forn(j,k+1)
			if (t[i][j] < inf){
			int next = min(k, j + a[i+1] - a[i]);
			if (t[i+1][next] > t[i][j] + 1.0 * (a[i+1] - a[i]) / w){
				t[i+1][next] = t[i][j] + 1.0 * (a[i+1] - a[i]) / w;
				p[i+1][next] = j;
			}
			if (t[i+1][j] > t[i][j] + 1.0 * (a[i+1] - a[i]) / v + wait(t[i][j] - beg[i])){
				t[i+1][j] = t[i][j] + 1.0 * (a[i+1] - a[i]) / v + wait(t[i][j] - beg[i]);
				p[i+1][j] = j;
			}
		}
	res = t[n-1][k];
	int now = k;
	for (int i = n-1; i > 0; i--){
//		cerr << i << " " << t[i][now] << " " << (t[i-1][p[i][now]] + 1.0 * (a[i] - a[i-1]) / w) << endl;
		if (fabsl(t[i][now] - (t[i-1][p[i][now]] + 1.0 * (a[i] - a[i-1]) / w)) < eps)
			path.pb(i);
		now = p[i][now];
	}
}

void read(){
	scanf("%d", &n);
	forn(i,n)
		scanf("%d", &a[i]);
	scanf("%d %d %d %d", &T, &k, &w, &v);
}

void write(){
	printf("%0.9lf\n", res);
	printf("%d\n", (int)path.size());
	ford(i,path.size())
		printf("%d ", path[i]);
	printf("\n");
}

int main ()
{
	freopen ((task + ".in").data(), "r", stdin);
	freopen ((task + ".out").data(), "w", stdout);

	read();
	solve();
	write();

	return 0;
}