#include <bits/stdc++.h>
using namespace std;
int dp[20][20][20][20];
int arr[20];
int n, a, b;
int func(int totake, int prv, int now, int nxt) {
  if (totake == n) {
    if (now > arr[totake] && prv > arr[totake - 1])
      return 0;
    else
      return (1 << 29);
  }
  prv = min(prv, 19);
  now = min(now, 19);
  nxt = min(nxt, 19);
  if (dp[totake][prv][now][nxt] != -1) return dp[totake][prv][now][nxt];
  int ans = (1 << 29);
  if (prv > arr[totake - 1]) {
    ans = min(ans, func(totake + 1, now, nxt, 0));
  }
  for (int i = 1; true; ++i) {
    if (prv + b * i > arr[totake - 1]) {
      ans = min(ans, i + func(totake + 1, now + a * i, nxt + b * i, 0));
      if (nxt + b * i > arr[totake + 1] && now + a * i > arr[totake]) break;
    }
  }
  return dp[totake][prv][now][nxt] = ans;
}
vector<pair<int, int> > ans;
void pp(int totake, int prv, int now, int nxt) {
  if (totake == n) {
    return;
  }
  prv = min(prv, 19);
  now = min(now, 19);
  nxt = min(nxt, 19);
  int &ret = dp[totake][prv][now][nxt];
  if (prv > arr[totake - 1]) {
    if (ret == func(totake + 1, now, nxt, 0)) {
      pp(totake + 1, now, nxt, 0);
      return;
    }
  }
  for (int i = 1; true; ++i) {
    if (prv + b * i > arr[totake - 1]) {
      if (ret == i + func(totake + 1, now + a * i, nxt + b * i, 0)) {
        ans.push_back(make_pair(totake, i));
        pp(totake + 1, now + a * i, nxt + b * i, 0);
        return;
      }
      if (nxt + b * i > arr[totake + 1] && now + a * i > arr[totake]) break;
    }
  }
  return;
}
int main() {
  memset((dp), -1, sizeof(dp));
  ;
  for (int i = 0; i < 20; ++i) {
    arr[i] = -100000;
  }
  scanf("%d %d %d", &n, &a, &b);
  for (int i = 1; i <= n; ++i) {
    scanf("%d", &arr[i]);
  }
  printf("%d\n", func(2, 0, 0, 0));
  pp(2, 0, 0, 0);
  for (int i = 0; i < ans.size(); ++i) {
    for (int j = 0; j < ans[i].second; ++j) {
      if (i || j) printf(" ");
      printf("%d", ans[i].first);
    }
  }
  return 0;
}
