#include <bits/stdc++.h>
using namespace std;
long long int mint(long long int x, long long int y) { return (x < y) ? x : y; }
int main() {
  long long int n, l, x, y;
  cin >> n >> l >> x >> y;
  long long int i;
  map<long long int, int> mp;
  long long int a;
  for (i = 0; i < n; ++i) {
    cin >> a;
    mp[a] = 1;
  }
  int flag = 0, flag1 = 0;
  for (std::map<long long int, int>::iterator it = mp.begin(); it != mp.end();
       ++it) {
    if (mp.find(it->first + x) != mp.end()) {
      flag = 1;
      break;
    }
  }
  for (std::map<long long int, int>::iterator it = mp.begin(); it != mp.end();
       ++it) {
    if (mp.find(it->first + y) != mp.end()) {
      flag1 = 1;
      break;
    }
  }
  if (flag && flag1)
    cout << "0";
  else if (flag) {
    cout << "1\n" << y;
  } else if (flag1)
    cout << "1\n" << x;
  else {
    flag = 0, flag1 = 0;
    std::map<long long int, int>::iterator it = mp.begin();
    for (; it != mp.end(); ++it) {
      if (mp.find(x + it->first + y) != mp.end()) {
        flag = 1;
        break;
      }
      if (mp.find(x + it->first - y) != mp.end() &&
          (it->first - y > 0 || it->first + x < l)) {
        flag = 1;
        break;
      }
    }
    if (flag && mp.find(x + it->first + y) != mp.end())
      cout << "1\n" << it->first + x;
    else if (flag && it->first - y > 0)
      cout << "1\n" << it->first - y;
    else if (flag && it->first + x < l)
      cout << "1\n" << it->first + x;
    else {
      it = mp.begin();
      for (; it != mp.end(); ++it) {
        if (mp.find(y + it->first - x) != mp.end() &&
            (it->first - x > 0 || it->first + y < l)) {
          flag = 1;
          break;
        }
      }
      if (flag && it->first - x > 0) {
        cout << "1\n" << it->first - x;
      } else if (flag && it->first + y < l)
        cout << "1\n" << it->first + y;
      else
        cout << "2\n" << x << " " << y;
    }
  }
  return 0;
}
