#include <bits/stdc++.h>
using namespace std;
template <class T>
bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
bool chmin(T &a, const T &b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
ostream &operator<<(ostream &os, const vector<T> &t) {
  os << "[";
  for (__typeof((t).begin()) it = (t).begin(); it != (t).end(); it++) {
    if (it != t.begin()) os << ",";
    os << *it;
  }
  os << "]";
  return os;
}
template <class T>
ostream &operator<<(ostream &os, const set<T> &t) {
  os << "{";
  for (__typeof((t).begin()) it = (t).begin(); it != (t).end(); it++) {
    if (it != t.begin()) os << ",";
    os << *it;
  }
  os << "}";
  return os;
}
template <class S, class T>
ostream &operator<<(ostream &os, const pair<S, T> &t) {
  return os << "(" << t.first << "," << t.second << ")";
}
const int INF = 1 << 28;
const double EPS = 1e-8;
const int MOD = 1000000007;
int n, l, x, y;
int main() {
  scanf("%d%d%d%d", &n, &l, &x, &y);
  set<int> me;
  int f = 0, tar = 0, tar2 = 0;
  for (int i = 0; i < (int)(n); i++) {
    int t;
    scanf("%d", &t);
    me.insert(t);
    if (me.count(t - x)) f |= 1;
    if (me.count(t - y)) f |= 2;
    if (me.count(t - x - y)) {
      f |= 4;
      tar = t - x;
    }
    if (me.count(t + x - y)) {
      if (t + x <= l) {
        f |= 8;
        tar2 = t + x;
      } else if (0 <= t - y) {
        f |= 8;
        tar2 = t - y;
      }
    }
  }
  if ((f & 3) == 3)
    puts("0");
  else if (f & 1)
    printf("%d\n%d\n", 1, y);
  else if (f & 2)
    printf("%d\n%d\n", 1, x);
  else if (f & 4)
    printf("%d\n%d\n", 1, tar);
  else if (f & 8)
    printf("%d\n%d\n", 1, tar2);
  else
    printf("%d\n%d %d\n", 2, x, y);
  return 0;
}
