#include <bits/stdc++.h>
using namespace std;
template <typename A, typename B>
inline bool mina(A &x, B y) {
  return (x > y) ? (x = y, 1) : 0;
}
template <typename A, typename B>
inline bool maxa(A &x, B y) {
  return (x < y) ? (x = y, 1) : 0;
}
int N, L, X, Y;
int A[(100005)];
int B[(100005)];
int find1(int l) {
  int i = 0;
  int j = 0;
  int c = 0;
  B[0] = -1;
  while (j < N) {
    if (A[j] - A[i] == l) B[c++] = A[i];
    if (A[j] - A[i] < l)
      ++j;
    else
      ++i;
  }
  return c;
}
int main() {
  cin >> N >> L >> X >> Y;
  for (int _b = (N), i = (0); i < _b; ++i) scanf("%d", A + i);
  find1(X);
  int x = B[0];
  find1(Y);
  int y = B[0];
  if (x >= 0 && y >= 0)
    printf("0\n");
  else if (x >= 0 && y == -1)
    printf("1\n%d\n", Y);
  else if (x == -1 && y >= 0)
    printf("1\n%d\n", X);
  else {
    find1(X + Y);
    int a = B[0];
    if (a != -1)
      printf("1\n%d\n", a + X);
    else {
      int d = Y - X;
      int bn = find1(d);
      int f = 0;
      for (int _b = (bn), i = (0); i < _b; ++i) {
        int p1 = B[i] - X;
        if (p1 >= 0) {
          printf("1\n%d\n", p1);
          f = 1;
          break;
        }
        int p2 = B[i] + Y;
        if (p2 <= L) {
          printf("1\n%d\n", p2);
          f = 1;
          break;
        }
      }
      if (!f) printf("2\n%d %d\n", X, Y);
    }
  }
  return 0;
}
