#include<iostream>;

using namespace std;

struct TParent

{

int i, j;

};

int i, j, k, n, a, b, maxans, maxi;

int t[1005][1005];

int m[1005], p[1005];

TParent par[1005][1005];

void rec(int i, int j)

{

if (i == 1)

{

printf("%i ", p[j]);

return;

}

rec(par[i][j].i, par[i][j].j);

printf("%i ", p[j] - p[i - 1]);

}

int main()

{

freopen("input.txt", "r", stdin);

freopen("output.txt", "w", stdout);

scanf("%d%d%d", &n, &a, &b);

for(i = 1; i <= n; i++)

{

scanf("%i", &m[i]);

if (m[i] > b)

{

printf("0";

fclose(stdin);

fclose(stdout);

return 0;



}

}

p[0] = 0;

for (i = 1; i <= n; i++)

{

p[i] = p[i - 1] + m[i];

}

t[1][1] = 1;

par[1][1].i = 1;

par[1][1].j = 1;

for (i = 1; i <= n; i++)

{

for (j = i; j <= n; j++)

{

if (!(t[i][j])) continue;

if((j < n) && (p[j + 1] - p[i - 1] <= b))

{

t[i][j + 1] = t[i][j];

par[i][j + 1].i = par[i][j].i;

par[i][j + 1].j = par[i][j].j;

}

if ((j < n) && (p[j] - p[i - 1] <= b) && (p[j] - p[i - 1] >=a) && (p[n] - p[j] >= a))

{

t[j + 1][j + 1] = t[i][j] + 1;

par[j + 1][j + 1].i = i;

par[j + 1][j + 1].j = j;

}

}

}

maxans = 0;

for (i = 1; i <= n; i++)

{

if (t[i][n] > maxans)

{

maxans = t[i][n];

maxi = i;

}

}

if (maxans == 1)

{

if ((p[n] < a) || (p[n] > b))

{

maxans = 0;

}

}

printf("%d\n", maxans);

if (!(maxans))

{

fclose(stdin);

fclose(stdout);

return 0;

}

rec(maxi, n);

fclose(stdin);

fclose(stdout);

return 0;

}