#include <bits/stdc++.h>
using namespace std;
using ll = long long;
void bober() {
  int n, l, x, y;
  cin >> n >> l >> x >> y;
  vector<ll> a(n + 2);
  n++;
  a[n] = l;
  set<ll> s;
  s.insert(0);
  bool is[2];
  is[0] = is[1] = 0;
  for (int i = 1; i <= n - 1; i++) {
    cin >> a[i];
    if (s.find(a[i] - x) != s.end()) is[0] = 1;
    if (s.find(a[i] - y) != s.end()) is[1] = 1;
    s.insert(a[i]);
  }
  if (s.find(l - x) != s.end()) is[0] = 1;
  if (s.find(l - y) != s.end()) is[1] = 1;
  if (is[0] && is[1]) {
    cout << "0\n";
    return;
  }
  int can = 0;
  for (int i = 1; i <= n; i++) {
    if (a[i] - x > 0 &&
        (s.find(a[i] - x + y) != s.end() || s.find(a[i] - x - y) != s.end()))
      can = a[i] - x;
    if (a[i] + x < l &&
        (s.find(a[i] + x + y) != s.end() || s.find(a[i] + x - y) != s.end()))
      can = a[i] + x;
  }
  if (is[0] || is[1] || can) {
    cout << "1\n" << (is[0] || is[1] ? (is[0] ? y : x) : can);
    return;
  }
  cout << "2\n" << x << " " << y;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int q;
  q = 1;
  while (q--) {
    bober();
  }
  return 0;
}
