← Home
// LUOGU_RID: 152724159
package main

import (
	. "fmt"
	"io"
	"os"
)

// https://space.bilibili.com/206214
func cf6D(in io.Reader, out io.Writer) {
	var n, fi, se int
	Fscan(in, &n, &fi, &se)
	a := make([]int, n)
	for i := range a {
		Fscan(in, &a[i])
		a[i]++
	}

	k := (a[0]-1)/se + 1
	type pair struct{ i, c int }
	ans := []pair{{1, k}}
	a[1] -= k * fi
	a[2] -= k * se

	if a[n-1] > 0 {
		k = (a[n-1]-1)/se + 1
		ans = append(ans, pair{n - 2, k})
		a[n-2] -= k * fi
		a[n-3] -= k * se
	}

	dp := make([][17][17]int, n)
	for i := range dp {
		for j := range dp[i] {
			for k := range dp[i][j] {
				dp[i][j][k] = -1
			}
		}
	}
	var f func(int, int, int) int
	f = func(i, preHit, preHp int) int {
		if i == n-1 {
			return 0
		}
		dv := &dp[i][preHit][preHp]
		if *dv != -1 {
			return *dv
		}
		hp := a[i] - preHit*se
		hit := 0
		if preHp > 0 {
			hit = (preHp-1)/se + 1
			hp -= hit * fi
		}
		res := int(1e9)
		for {
			res = min(res, hit+f(i+1, hit, max(hp, 0)))
			if hp <= 0 && hit*se >= a[i+1] {
				*dv = res
				return res
			}
			hit++
			hp -= fi
		}
	}

	var pr func(int, int, int)
	pr = func(i, preHit, preHp int) {
		if i == n-1 {
			return
		}
		hp := a[i] - preHit*se
		hit := 0
		if preHp > 0 {
			hit = (preHp-1)/se + 1
			hp -= hit * fi
		}
		res := f(i, preHit, preHp)
		for {
			if hit+f(i+1, hit, max(hp, 0)) == res {
				ans = append(ans, pair{i, hit})
				pr(i+1, hit, max(hp, 0))
				return
			}
			hit++
			hp -= fi
		}
	}
	pr(1, 0, 0)

	s := 0
	for _, p := range ans {
		s += p.c
	}
	Fprintln(out, s)
	for _, p := range ans {
		for c := p.c; c > 0; c-- {
			Fprint(out, p.i+1, " ")
		}
	}
}

func main() { cf6D(os.Stdin, os.Stdout) }
func min(a, b int) int { if b < a { return b }; return a }
func max(a, b int) int { if b > a { return b }; return a }