#include <bits/stdc++.h>
using namespace std;
int32_t main() {
  long long N, L, X, Y;
  cin >> N >> L >> X >> Y;
  long long A[N];
  bool a = false, b = false;
  vector<long long> marks;
  for (long long n = 0; n < N; n++) cin >> A[n];
  for (long long n = 0; n < N - 1; n++) {
    long long i = lower_bound(A + n + 1, A + N, A[n] + X) - A;
    if (i < N && A[i] == X + A[n]) a = true;
    long long j = lower_bound(A + n + 1, A + N, A[n] + Y) - A;
    if (j < N && A[j] == Y + A[n]) b = true;
  }
  if (!a && !b) {
    bool c = false;
    for (long long n = 0; n < N; n++) {
      long long k1 = lower_bound(A + n + 1, A + N, A[n] + X + Y) - A;
      if (k1 < N && A[k1] == A[n] + X + Y && A[n] + X < L) {
        marks.push_back(A[n] + X);
        c = true;
        break;
      }
      long long k2 = lower_bound(A + n + 1, A + N, A[n] - X + Y) - A;
      if (k2 < N && A[k2] == A[n] - X + Y) {
        if (A[n] + Y < L)
          marks.push_back(A[n] + Y);
        else if (A[n] - X > 0)
          marks.push_back(A[n] - X);
        else
          continue;
        c = true;
        break;
      }
    }
    if (!c) {
      marks.push_back(X);
      marks.push_back(Y);
    }
  } else {
    if (!a) marks.push_back(X);
    if (!b) marks.push_back(Y);
  }
  cout << marks.size() << endl;
  for (auto it : marks) cout << it << " ";
  cout << endl;
  return 0;
}
