#include <bits/stdc++.h>
const double PI = acos(-1.0);
template <class T>
T gcd(T a, T b) {
  return b ? gcd(b, a % b) : a;
}
template <class T>
T lcm(T a, T b) {
  return a / gcd(a, b) * b;
}
template <class T>
inline T Min(T a, T b) {
  return a < b ? a : b;
}
template <class T>
inline T Max(T a, T b) {
  return a > b ? a : b;
}
using namespace std;
int n, m, k;
int a[100005];
set<int> s;
int l, x, y;
bool check(int ck) {
  for (int i = 0; i < n; i++) {
    if (s.count(a[i] - ck) || s.count(a[i] + ck)) return true;
  }
  return false;
}
int find() {
  for (int i = 0; i < n; i++) {
    if (a[i] + x <= l && (s.count(a[i] + x + y) || s.count(a[i] + x - y)))
      return a[i] + x;
    if (a[i] - x >= 0 && (s.count(a[i] - x + y) || s.count(a[i] - x - y)))
      return a[i] - x;
  }
  return -1;
}
int main() {
  while (scanf("%d%d%d%d", &n, &l, &x, &y) != EOF) {
    s.clear();
    for (int i = 0; i < n; i++) {
      scanf("%d", &a[i]);
      s.insert(a[i]);
    }
    bool b1 = check(x), b2 = check(y);
    if (b1 && b2)
      printf("0\n");
    else if (!b1 && b2)
      printf("1\n%d\n", x);
    else if (b1 && !b2)
      printf("1\n%d\n", y);
    else {
      int res = find();
      if (res == -1)
        printf("2\n%d %d\n", x, y);
      else
        printf("1\n%d\n", res);
    }
  }
  return 0;
}
