#include <cstdio>
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
#include <string>
#include <cstring>
#include <cassert>

using namespace std;

#define forn(i, n) for(int i = 0; i < (int)(n); i++)
#define all(a) a.begin(), a.end()
#define pb push_back

typedef long long int64;

const int64 inf64 = ((int64)1 << 62) - 1;
const string task = "tram";

const int NMAX = 2001;

int64 a[NMAX], vv, vt, t[NMAX][NMAX], T;
int p[NMAX][NMAX];
int k, n;

void read_data ()
{
	if (task != "")
	{
		freopen ((task + ".in").data(), "r", stdin);
		freopen ((task + ".out").data(), "w", stdout);
	}
	scanf ("%d", &n);
	a[0] = 0;
	forn (i, n)
	{
		int x;
		scanf ("%d", &x);
		a[i+1] = x;
	}
	int t1, v, w;
	scanf ("%d%d%d%d", &t1, &k, &v, &w);
	T = t1;
	vv = v;
	vt = w;
	assert (1 <= vv && vv <= 10000);
	assert (1 <= vt && vt <= 10000);
	assert (1 <= T && T <= 2000);
	assert (1 <= k && k <= 2000);
	assert (1 <= n && n <= 2000);
	forn (i, n+1)
		assert (0 <= a[i] && a[i] <= 1000000000);
	forn (i, n-1)
		assert (a[i+1] < a[i+2]);
	T *= vv * vt;
	forn (i, n+1)
		a[i] *= vv * vt;
}

vector <int> ans;

int main ()
{
	read_data ();
	forn (i, n+1)
		forn (j, k+1)
			t[i][j] = inf64;
	memset (p, 255, sizeof (p));
	p[1][k] = -1;
	t[1][k] = 0;
	for (int i = 1; i < n; i ++)
		for (int j = 0; j <= k; j ++)	
		{
			int64 ct = t[i][j] + (T - t[i][j] % T + ((a[i] - a[1]) / vt) % T) % T;
			if (t[i+1][j] >= ct + (a[i+1] - a[i]) / vt)
			{
				t[i+1][j] = ct + (a[i+1] - a[i]) / vt;
				p[i+1][j] = -2;
			}
			int nk = max (0LL, j - (a[i+1] - a[i]) / vv / vt); 
			if (t[i+1][nk] > t[i][j] + (a[i+1] - a[i]) / vv)
			{
				t[i+1][nk] = t[i][j] + (a[i+1] - a[i]) / vv;
				p[i+1][nk] = j;
			}
		}
	printf ("%.6lf\n", (double)t[n][0] / vv / vt);
	ans.clear ();
	int x = n;
	int y = 0;
	while (x > 1)
	{
		if (p[x][y] != -2)
		{
			ans.pb (x-1);
			y = p[x][y];
		}
		x --;
	}
	reverse (all (ans));
	printf ("%d\n", ans.size());
	forn (i, ans.size())
		printf ("%d\n", ans[i]);
	return 0;
}
