#include <bits/stdc++.h>
using namespace std;
int a[100010];
int n, l, x, y;
bool have(int jump) {
  int lastidx = 0;
  for (int i = 1; i < n; i++) {
    while (a[i] - a[lastidx] > jump) lastidx++;
    if (a[i] - a[lastidx] == jump) {
      return true;
    }
  }
  return false;
}
int main() {
  scanf("%d%d%d%d", &n, &l, &x, &y);
  for (int i = 0; i < n; i++) scanf("%d", &a[i]);
  if (have(x) && have(y))
    printf("0\n");
  else if (have(x))
    printf("1\n%d\n", y);
  else if (have(y))
    printf("1\n%d\n", x);
  else {
    if (have(x + y)) {
      int jump = x + y;
      int lastidx = 0;
      for (int i = 1; i < n; i++) {
        while (a[i] - a[lastidx] > jump) lastidx++;
        if (a[i] - a[lastidx] == jump) {
          printf("1\n%d\n", a[lastidx] + x);
          return 0;
        }
      }
    }
    if (!have(y - x))
      printf("2\n%d\n%d\n", x, y);
    else {
      int jump = y - x;
      int lastidx = 0;
      for (int i = 1; i < n; i++) {
        while (a[i] - a[lastidx] > jump) lastidx++;
        if (a[i] - a[lastidx] == jump) {
          if (a[i] - y >= 0) {
            printf("1\n%d\n", a[i] - y);
            return 0;
          } else if (a[lastidx] + y <= l) {
            printf("1\n%d\n", a[lastidx] + y);
            return 0;
          }
        }
      }
      printf("2\n%d\n%d\n", x, y);
    }
  }
  return 0;
}
