#include <bits/stdc++.h>
using namespace std;
int64_t power(int64_t a, int64_t b) {
  int64_t ans = 1;
  while (b) {
    if (b & 1) {
      ans = (ans * a) % 1000000007;
    }
    a = (a * a) % 1000000007;
    b >>= 1;
  }
  return ans;
}
int64_t mmi(int64_t n) { return power(n, 1000000007 - 2); }
int64_t two(int64_t n) { return 1 << n; }
void onbit(int64_t &n, int64_t x) { n |= two(x); }
void offbit(int64_t &n, int64_t x) { n &= ~two(x); }
int64_t cntbit(int64_t n) {
  int64_t res = 0;
  while (n and ++res) n -= n & -n;
  return res;
}
int64_t dx[] = {-1, 0, 1, 0}, dy[] = {0, -1, 0, 1};
int64_t n, l, x, y, a[100005];
map<int64_t, int64_t> mpp;
map<int64_t, int64_t>::iterator it;
void solve() {
  int64_t i;
  cin >> n >> l >> x >> y;
  for (i = 1; i < n + 1; i++) {
    cin >> a[i];
    mpp[a[i]]++;
  }
  int64_t findx = 0, findy = 0;
  for (i = 1; i < n + 1; i++) {
    if (mpp[a[i] + x]) findx = 1;
    if (mpp[a[i] + y]) findy = 1;
  }
  if (findx and findy) {
    cout << "0";
    return;
  }
  if (findx) {
    cout << "1";
    cout << '\n';
    cout << y;
    return;
  }
  if (findy) {
    cout << "1";
    cout << '\n';
    cout << x;
    return;
  }
  for (i = 1; i < n + 1; i++) {
    if (mpp[a[i] + x + y]) {
      cout << "1";
      cout << '\n';
      cout << a[i] + x;
      return;
    }
    if (mpp[a[i] + x - y] and a[i] + x < l) {
      cout << "1";
      cout << '\n';
      cout << a[i] + x;
      return;
    }
    if (mpp[a[i] + y - x] and a[i] + y < l) {
      cout << "1";
      cout << '\n';
      cout << a[i] + y;
      return;
    }
    if (mpp[a[i] + x - y] and a[i] - y > 0) {
      cout << "1";
      cout << '\n';
      cout << a[i] - y;
      return;
    }
    if (mpp[a[i] + y - x] and a[i] - x > 0) {
      cout << "1";
      cout << '\n';
      cout << a[i] - x;
      return;
    }
  }
  cout << "2";
  cout << '\n';
  cout << x << " " << y;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  int64_t t = 1;
  while (t--) {
    solve();
  }
  return 0;
}
