#include <iostream>
#include <vector>
#include <bitset>
#include <algorithm>
using namespace std;
// Maksymalna wysokość stabilna według treści zadania to 10 000.
const int MAX_VAL = 10001;
bool is_stable[MAX_VAL];
int main() {
// Przyspieszenie operacji wejścia/wyjścia
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n;
if (!(cin >> n)) return 0;
int last_stable_input = 0;
for (int i = 0; i < n; ++i) {
int t;
cin >> t;
if (t < MAX_VAL) {
is_stable[t] = true;
last_stable_input = t;
}
}
// reachable[i] będzie true, jeśli wysokość i można ułożyć z prętów w S
bitset<MAX_VAL> reachable;
reachable[0] = 1; // Wysokość 0 jest zawsze osiągalna (brak prętów)
vector<int> S;
int H = 0;
// Przechodzimy po wszystkich możliwych wysokościach
for (int i = 1; i < MAX_VAL; ++i) {
if (is_stable[i]) {
// Jeśli wysokość jest stabilna, ale nie możemy jej jeszcze ułożyć:
if (!reachable[i]) {
// Musimy dodać i do naszego zestawu S (minimalizacja)
S.push_back(i);
// Aktualizujemy osiągalne wysokości (plecak nieograniczony)
// Używamy dekompozycji binarnej, by zachować wydajność bitsetu
for (int k = 1; i * k < MAX_VAL; k <<= 1) {
reachable |= (reachable << (i * k));
}
}
// Dopóki nie napotkaliśmy błędu, aktualna stabilna wysokość
// może być częścią bezpiecznej komory.
H = i;
} else {
// Jeśli wysokość NIE jest stabilna, a da się ją ułożyć:
if (reachable[i]) {
// To jest pierwsza "niebezpieczna" wysokość.
// Maksymalne bezpieczne H to i - 1.
H = i - 1;
break;
}
}
}
// Dodatkowe sprawdzenie: jeśli po ostatniej stabilnej wysokości
// jest "pusta przestrzeń", w której nic nie da się ułożyć, H może być większe.
if (H < MAX_VAL - 1 && !is_stable[H+1]) {
for (int i = H + 1; i < MAX_VAL; ++i) {
if (reachable[i]) {
H = i - 1;
break;
}
if (i == MAX_VAL - 1) H = MAX_VAL - 1;
}
}
// Wypisujemy wynik: maksymalne H oraz elementy zestawu S
cout << H << "\n";
for (int s : S) {
if (s <= H) {
cout << s << "\n";
}
}
return 0;
}