#include <bits/stdc++.h>   using namespace std;   long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }   template <class T1, class T2>   struct cmpf {     bool rev;     inline bool operator()(const pair<T1, T2>& a, const pair<T1, T2>& b) const {       return (a.first < b.first) ^ rev;     }     cmpf(bool b = false) { rev = b; }   };   template <class T1, class T2>   struct cmps {     bool rev;     inline bool operator()(const pair<T1, T2>& a, const pair<T1, T2>& b) const {       return (a.second < b.second) ^ rev;     }     cmps(bool b = false) { rev = b; }   };   string to_string(const char& c) { return string(1, c); }   string to_string(const string& s) { return     + s +    ; }   string to_string(const char* s) { return to_string((string)s); }   string to_string(const bool& b) { return (b ?  true  :  false ); }   string to_string(const vector<bool>& v, const string& sep =    ) {     string s =  [ ;     for (int i = 0; i < v.size(); i++) {       if (i) {         s += sep;       }       s += to_string(v[i]);     }     return s +  ] ;   }   template <size_t N>   string to_string(const bitset<N>& v) {     string s =  [ ;     for (size_t i = 0; i < N; i++) s += v[i] ?  1  :  0 ;     return s +  ] ;   }   template <class T1, class T2>   string to_string(const pair<T1, T2>& p, const string& sep =  , );   template <class T>   string to_string(const T& v, const string& sep =    ) {     bool first = true;     string s =  { ;     for (const auto& x : v) {       if (!first)         s += sep;       else         first = false;       s += to_string(x);     }     return s +  } ;   }   template <class T>   string to_string(const T& v, const int& sz, const string& sep =    ) {     string s =  [ ;     for (int i = 0; i < sz; i++) {       if (i) {         s += sep;       }       s += to_string(v[i]);     }     return s +  ] ;   }   template <class T1, class T2>   string to_string(const pair<T1, T2>& p, const string& sep) {     return  (  + to_string(p.first) + sep + to_string(p.second) +  ) ;   }   long long binpow(const long long& x, const long long& p, const long long& mod) {     assert(mod > 0);     if (p == 0) return 1;     if (p == 1) return x % mod;     if (p & 1) return (binpow((x * x) % mod, p / 2, mod) * x) % mod;     return binpow((x * x) % mod, p / 2, mod) % mod;   }   template <class T>   void chmn(T& a, const T& b) {     if (a > b) a = b;   }   template <class T>   void chmx(T& a, const T& b) {     if (a < b) a = b;   }   void setIO() {     ios_base::sync_with_stdio(false);     cin.tie(nullptr);     cout.tie(nullptr);   }   int chr[8] = {-1, 0, 1, 0, -1, -1, 1, 1};   int chc[8] = {0, 1, 0, -1, -1, 1, -1, 1};   const long long MOD = 1e9 + 7;   const int INIT = 1001001001;   const int MN = 10001;   long long BIT[MN];   void inc(int pos) {     for (; pos < MN; pos |= pos + 1) ++BIT[pos];   }   long long query(int pos) {     long long res = 0;     for (; pos > 0; pos &= pos - 1) res += BIT[pos - 1];     return res;   }   long long N, P;   long long A[MN];   long long f(long long x) {     long long cur = 1;     for (int i = 0; i < N; i++) {       long long q = query(x + i + 1);       if (q <= i) return -1;       cur = (cur * (q - i)) % P;     }     return cur;   }   void solve() {     cin >> N >> P;     for (int i = 0; i < N; i++) {       cin >> A[i];       inc(A[i]);     }     vector<int> ans;     for (int x = 1; x < 4000; x++) {       if (f(x) > 0) {         ans.push_back(x);       }     }     cout << ans.size() << endl;     for (int i = 0; i < ans.size(); i++) {       if (i) cout <<    ;       cout << ans[i];     }     cout << endl;   }   int main() {     setIO();     long long T = 1;     while (T-- > 0) solve();     return 0;   }