#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
#pragma GCC target("avx,avx2")
using namespace std;
long long mod = 1e9 + 7;
const long long inf = 1e9;
int main() {
  cin.tie(0), cout.tie(0), ios_base::sync_with_stdio(0);
  int n, l, x, y;
  cin >> n >> l >> x >> y;
  vector<int> a(n);
  set<int> ax, ay;
  map<int, int> have;
  bool havex = 0, havey = 0;
  for (int i = 0; i < n; ++i) {
    cin >> a[i];
    have[a[i]] = 1;
  }
  for (int i = 0; i < n; ++i) {
    if (a[i] + x < l && !have[a[i] + x]) ax.insert(a[i] + x);
    if (a[i] + y < l && !have[a[i] + y]) ay.insert(a[i] + y);
    if (a[i] - x > 0 && !have[a[i] - x]) ax.insert(a[i] - x);
    if (a[i] - y > 0 && !have[a[i] - y]) ay.insert(a[i] - y);
  }
  for (int i = 0; i < n; ++i) {
    if (have[a[i] - x] || have[a[i] + x]) havex = 1;
    if (have[a[i] - y] || have[a[i] + y]) havey = 1;
  }
  vector<int> ans;
  if (havex && havey) {
    cout << 0;
    exit(0);
  }
  if (havex) {
    cout << "1\n" << (*ay.begin());
    exit(0);
  }
  if (havey) {
    cout << "1\n" << (*ax.begin());
    exit(0);
  }
  for (int val : ax) {
    if (ay.count(val)) {
      cout << "1\n" << val;
      exit(0);
    }
  }
  cout << "2\n" << (*ax.begin()) << " " << (*ay.begin());
  return 0;
}
