#include <bits/stdc++.h>
using namespace std;
map<int, int> Map;
int a[100100], n, X, Y;
int L;
int judge0() {
  int f0(0), f1(0);
  for (int(i) = (1), (_end_) = (n); (i) <= (_end_); ++(i)) {
    if (Map.count(a[i] - X) || Map.count(a[i] + X)) f0 = 1;
    if (Map.count(a[i] - Y) || Map.count(a[i] + Y)) f1 = 1;
  }
  return f0 * 2 + f1;
}
int judge1() {
  for (int(i) = (1), (_end_) = (n); (i) <= (_end_); ++(i)) {
    if (a[i] + X <= L && Map.count(a[i] + X - Y)) return a[i] + X;
    if (a[i] + Y <= L && Map.count(a[i] + Y - X)) return a[i] + Y;
    if (a[i] - X >= 0 && Map.count(a[i] - X + Y)) return a[i] - X;
    if (a[i] - Y >= 0 && Map.count(a[i] - Y + X)) return a[i] - Y;
    if (Map.count(a[i] + X + Y)) return a[i] + X;
    if (Map.count(a[i] - X - Y)) return a[i] - X;
  }
  return -1;
}
int main() {
  int m;
  scanf("%d%d%d%d", &n, &L, &X, &Y);
  for (int(i) = (1), (_end_) = (n); (i) <= (_end_); ++(i)) {
    scanf("%d", &a[i]);
    Map[a[i]] = 1;
  }
  if ((m = judge0())) {
    if (m == 3) printf("0\n");
    if (m == 1) printf("1\n%d\n", X);
    if (m == 2) printf("1\n%d\n", Y);
  } else if ((m = judge1()) != -1)
    printf("%d\n%d\n", 1, m);
  else
    printf("2\n%d %d\n", X, Y);
  return 0;
}
