#include <bits/stdc++.h>
const int MAX = 1e5 + 11;
using namespace std;
int N, L, X, Y, A[MAX];
set<int> all;
static bool can(int v) {
  for (int i = 0; i < (N); ++i) {
    if (all.count(v + A[i])) {
      return true;
    }
  }
  return all.count(v) > 0;
}
int main() {
  scanf("%d%d%d%d", &(N), &(L), &(X), &(Y));
  for (int i = 0; i < (N); ++i) {
    scanf("%d", &(A[i]));
    all.insert(A[i]);
  }
  if (can(X) && can(Y)) {
    printf("0");
    return 0;
  }
  if (can(X)) {
    printf("1\n%d", Y);
    return 0;
  }
  if (can(Y)) {
    printf("1\n%d", X);
    return 0;
  }
  set<int> xx, yy;
  for (int i = 0; i < (N); ++i) {
    if (X + A[i] < L) xx.insert(X + A[i]);
    if (Y + A[i] < L) yy.insert(Y + A[i]);
  }
  for (auto u : xx) {
    if (yy.count(u)) {
      printf("1\n%d", u);
      return 0;
    }
  }
  xx = set<int>(), yy = set<int>();
  for (int i = 0; i < (N); ++i) {
    if (A[i] - X >= 0) xx.insert(A[i] - X);
    if (A[i] - Y >= 0) yy.insert(A[i] - Y);
  }
  for (auto u : xx) {
    if (yy.count(u)) {
      printf("1\n%d", u);
      return 0;
    }
  }
  xx = set<int>(), yy = set<int>();
  for (int i = 0; i < (N); ++i) {
    if (A[i] - X >= 0) xx.insert(A[i] - X);
    if (A[i] + Y >= 0) yy.insert(A[i] + Y);
  }
  for (auto u : xx) {
    if (yy.count(u)) {
      printf("1\n%d", u);
      return 0;
    }
  }
  xx = set<int>(), yy = set<int>();
  for (int i = 0; i < (N); ++i) {
    if (A[i] + X >= 0) xx.insert(A[i] + X);
    if (A[i] - Y >= 0) yy.insert(A[i] - Y);
  }
  for (auto u : xx) {
    if (yy.count(u)) {
      printf("1\n%d", u);
      return 0;
    }
  }
  A[N++] = X;
  if (can(Y)) {
    printf("1\n%d", X);
    return 0;
  }
  A[N - 1] = Y;
  if (can(X)) {
    printf("1%d\n", Y);
    return 0;
  }
  printf("2\n%d %d", X, Y);
  return 0;
}
