#include <bits/stdc++.h>
using namespace std;
ifstream fin("in.in");
ofstream fout("out.out");
const int N = 100000 + 10;
int n, l, x, y, first[N], extra;
vector<int> ext;
set<int> s, markX, markY;
bool canX, canY;
int main() {
  ios_base::sync_with_stdio(0);
  cin >> n >> l >> x >> y;
  for (int i = 0; i < n; i++) {
    cin >> first[i];
    s.insert(first[i]);
    if (s.find(first[i] - x) != s.end()) canX = true;
    if (s.find(first[i] - y) != s.end()) canY = true;
  }
  if (canX && canY) return (cout << 0), 0;
  if (canX) return (cout << 1 << endl << y), 0;
  if (canY) return (cout << 1 << endl << x), 0;
  for (int i = 0; i < n; i++) {
    if (first[i] + x <= l) {
      ext.push_back(first[i] + x);
      markX.insert(first[i] + x);
    }
    if (first[i] + y <= l) {
      ext.push_back(first[i] + y);
      markY.insert(first[i] + y);
    }
    if (first[i] - x >= 0) {
      ext.push_back(first[i] - x);
      markX.insert(first[i] - x);
    }
    if (first[i] - y >= 0) {
      ext.push_back(first[i] - y);
      markY.insert(first[i] - y);
    }
  }
  for (int i = 0; i < ext.size(); i++)
    if (markX.find(ext[i]) != markX.end() && markY.find(ext[i]) != markY.end())
      return (cout << 1 << endl << ext[i]), 0;
  cout << 2 << endl << x << ' ' << y << endl;
  return 0;
}
