#include <bits/stdc++.h>
using namespace std;
template <class T>
inline T lcm(T a, T b) {
  return a / gcd(a, b) * b;
}
template <class A>
ostream& operator<<(ostream& out, const vector<A>& a) {
  out << "[";
  for (auto it = a.begin(); it != a.end(); it++) {
    if (it != a.begin()) out << ",";
    out << *it;
  }
  cout << "]";
  return out;
}
template <typename T>
void debug(T first) {
  cout << first << "\n";
}
template <typename T, typename... Args>
void debug(T first, Args... args) {
  cout << first << " ";
  debug(args...);
}
long long read_ll() {
  char c = getchar();
  while ((c < '0' || c > '9') && c != '-') c = getchar();
  long long ret = 0;
  int neg = 0;
  if (c == '-') neg = 1, c = getchar();
  while (c >= '0' && c <= '9') {
    ret = 10 * ret + c - 48;
    c = getchar();
  }
  return neg ? -ret : ret;
}
int main() {
  long long n, l, x, y;
  cin >> n >> l >> x >> y;
  long long num[2], found[2];
  found[0] = found[1] = 1;
  num[0] = x;
  num[1] = y;
  set<long long> a;
  for (int i = 0; i <= n - 1; i++) {
    a.insert(read_ll());
  }
  for (int k = 0; k <= 1; k++) {
    long long x = num[k];
    for (auto val : a) {
      if (a.count(x + val) != 0) {
        found[k] = 0;
      }
    }
  }
  if (found[0] + found[1] == 2) {
    for (auto val : a) {
      if (a.count(y - x + val) != 0) {
        if (val + y < l) return !printf("1\n%lld", val + y);
        if (val - x > 0) return !printf("1\n%lld", val - x);
      }
      if (a.count(y + x + val) != 0) {
        return !printf("1\n%lld", val + x);
      }
    }
  }
  cout << found[0] + found[1] << '\n';
  if (found[0]) cout << x << " ";
  if (found[1]) cout << y << " ";
  return 0;
}
