#include <bits/stdc++.h>
using namespace std;
int n, l, x, y;
int a[100001];
vector<int> rem;
set<int> s;
bool solve0();
bool solve1();
int main() {
  cin >> n >> l >> x >> y;
  for (int i = 0; i < n; i++) {
    fscanf(stdin, "%d", &a[i]);
    s.insert(a[i]);
  }
  if (solve0()) {
    return 0;
  }
  if (solve1()) {
    return 0;
  }
  cout << 2 << endl;
  cout << x << " " << y << endl;
  return 0;
}
bool solve0() {
  bool foundx = false;
  bool foundy = false;
  for (int i = 0; i < n; i++) {
    int target = a[i] + x;
    set<int>::iterator it = s.find(target);
    if (it != s.end()) {
      foundx = true;
    }
    target = a[i] + y;
    it = s.find(target);
    if (it != s.end()) {
      foundy = true;
    }
  }
  if (foundx && foundy) {
    cout << 0 << endl;
    return true;
  }
  if (foundx) {
    rem.push_back(y);
  } else if (foundy) {
    rem.push_back(x);
  } else {
    rem.push_back(x);
    rem.push_back(y);
  }
  return false;
}
bool solve1() {
  if (rem.size() == 1) {
    cout << 1 << endl;
    cout << rem[0] << endl;
    return true;
  }
  for (int i = 0; i < n; i++) {
    int target = a[i] + x;
    set<int>::iterator it = s.find(target);
    if (it == s.end() && a[i] + x < l) {
      set<int>::iterator ity1 = s.find(target - y);
      set<int>::iterator ity2 = s.find(target + y);
      if (ity1 != s.end() || ity2 != s.end()) {
        cout << 1 << endl;
        cout << a[i] + x << endl;
        return true;
      }
    }
  }
  for (int i = 0; i < n; i++) {
    int target = a[i] - x;
    set<int>::iterator it = s.find(target);
    if (it == s.end() && a[i] - x > 0) {
      set<int>::iterator ity1 = s.find(target - y);
      set<int>::iterator ity2 = s.find(target + y);
      if (ity1 != s.end() || ity2 != s.end()) {
        cout << 1 << endl;
        cout << a[i] - x << endl;
        return true;
      }
    }
  }
  for (int i = 0; i < n; i++) {
    int target = a[i] + y;
    set<int>::iterator it = s.find(target);
    if (it == s.end() && a[i] + y < l) {
      set<int>::iterator itx1 = s.find(target - x);
      set<int>::iterator itx2 = s.find(target + x);
      if (itx1 != s.end() || itx2 != s.end()) {
        cout << 1 << endl;
        cout << a[i] + y << endl;
        return true;
      }
    }
  }
  for (int i = 0; i < n; i++) {
    int target = a[i] - y;
    set<int>::iterator it = s.find(target);
    if (it == s.end() && a[i] - y > 0) {
      set<int>::iterator itx1 = s.find(target - x);
      set<int>::iterator itx2 = s.find(target + x);
      if (itx1 != s.end() || itx2 != s.end()) {
        cout << 1 << endl;
        cout << a[i] - y << endl;
        return true;
      }
    }
  }
  return false;
}
