#include <bits/stdc++.h>
using namespace std;
map<long long, int> mp;
map<long long, int>::iterator it;
long long l;
bool judge(long long x) {
  for (it = mp.begin(); it != mp.end(); it++) {
    if (mp.find(it->first + x) == mp.end()) continue;
    return true;
  }
  return false;
}
bool isin(long long x) {
  if (x >= 0 && x <= l) return true;
  return false;
}
bool chk(long long x, long long y) {
  for (it = mp.begin(); it != mp.end(); it++) {
    if (mp.find(it->first + x - y) != mp.end() ||
        mp.find(it->first + x + y) != mp.end()) {
      if (!isin(it->first + x)) continue;
      printf("1\n%I64d\n", it->first + x);
      return true;
    }
    if (mp.find(it->first - x + y) != mp.end() ||
        mp.find(it->first - x - y) != mp.end()) {
      if (!isin(it->first - x)) continue;
      printf("1\n%I64d\n", it->first - x);
      return true;
    }
  }
  return false;
}
int main() {
  int n;
  long long x, y, v;
  cin >> n >> l >> x >> y;
  for (int i = 1; i <= n; i++) {
    cin >> v;
    mp[v] = 1;
  }
  int num = 2;
  if (judge(x)) num--;
  if (judge(y)) num--;
  if (num == 0)
    printf("0\n");
  else {
    if (num == 1) {
      if (judge(x))
        printf("1\n%I64d\n", y);
      else
        printf("1\n%I64d\n", x);
    } else {
      if (chk(x, y) || chk(y, x)) {
      } else {
        printf("2\n%I64d %I64d\n", x, y);
      }
    }
  }
  return 0;
}
