#include <bits/stdc++.h>
using namespace std;
const int inf = 1e8;
struct node {
  int x, y, z, s;
} pre[12][18][18][18];
int n, a, b, dp[12][18][18][18], h[12];
vector<int> ans;
void f(int i, int x, int y, int z, int v, int xx, int yy, int zz, int s) {
  x = max(0, x);
  y = max(0, y);
  z = max(0, z);
  if (dp[i][x][y][z] > v) {
    dp[i][x][y][z] = v;
    pre[i][x][y][z] = (node){xx, yy, zz, s};
  }
}
void find(int i, int x, int y, int z) {
  node tmp = pre[i][x][y][z];
  int s = tmp.s;
  for (int j = 0; j < s; j++) {
    ans.push_back(i);
  }
  if (i == 2) {
    return;
  }
  find(i - 1, tmp.x, tmp.y, tmp.z);
}
int main() {
  scanf("%d%d%d", &n, &a, &b);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &h[i]);
    h[i]++;
  }
  for (int i = 0; i <= n; i++) {
    for (int x = 0; x <= 16; x++) {
      for (int y = 0; y <= 16; y++) {
        for (int z = 0; z <= 16; z++) {
          dp[i][x][y][z] = inf;
        }
      }
    }
  }
  f(1, h[1], h[2], h[3], 0, 0, 0, 0, 0);
  for (int i = 1; i < n - 1; i++) {
    int z = h[i + 2];
    for (int x = 0; x <= h[i]; x++) {
      for (int y = 0; y <= h[i + 1]; y++) {
        int v = dp[i][x][y][z];
        if (v >= inf) {
          continue;
        }
        for (int j = (x + b - 1) / b;; j++) {
          f(i + 1, y - j * a, z - j * b, h[i + 3], v + j, x, y, z, j);
          if (j * a > y && j * b > z) {
            break;
          }
        }
      }
    }
  }
  find(n - 1, 0, 0, 0);
  cout << ans.size() << endl;
  for (int i = 0; i < ans.size(); i++) {
    printf("%d ", ans[i]);
  }
  return 0;
}
