#include #include #include #include #include #include #include using namespace std; int n; int p[10]; int x; int y; set cisla; void solve() { //stack s; /* DBG printf("%d\n", n); for (int i = 0; i < n; i++) { printf("%d ", p[i]); } printf("\n%d %d\n", x, y); */ /*s.push(1); while (!s.empty()) { if (s.top() > y) { s.pop(); continue; } if (s.top() >= x) { cisla.insert(s.top()); } int tmp = s.top(); s.pop(); for (int i = 0; i < n; i++) { s.push(tmp * p[i]); } }*/ set sol; set nep; // neprozkoumane nep.insert(1); while(!nep.empty()) { int num = *nep.begin(); nep.erase(nep.begin()); if (num >= x) { cisla.insert(num); } for (int i = 0; i < n; i++) { int newnum = p[i] * num; if (newnum > y) continue; if (sol.find(newnum) != sol.end()) continue; nep.insert(newnum); } sol.insert(num); } } void print_result() { if (cisla.empty()) { printf("none\n"); return; } set::iterator it; vector v; for (it = cisla.begin(); it != cisla.end(); it++) { v.push_back(*it); } sort(v.begin(), v.end()); for (unsigned i = 0; i < v.size(); i++) { printf("%d", v[i]); if (i != v.size() -1) { printf(","); } } printf("\n"); } int main() { while(1) { /* init part */ cisla.clear(); x = 0; y = 0; n = 0; /* parsing */ scanf("%d", &n); if (n == 0) break; for (int i = 0; i < n; i++) { scanf("%d", &p[i]); } scanf("%d", &x); scanf("%d", &y); solve(); print_result(); } return 0; }