#include <bits/stdc++.h>
using namespace std;
int a[100200];
int main(int argc, char const *argv[]) {
  int n, l, x, y;
  cin >> n >> l >> x >> y;
  for (int i = 0; i < n; i++) {
    scanf("%d", &a[i]);
  }
  sort(a, a + n);
  int flagx = 0, flagy = 0;
  int posx, posy;
  for (int i = 0; i < n; i++) {
    int tmp = a[i] + x;
    posx = lower_bound(a, a + n, tmp) - a;
    if (a[posx] == tmp) {
      flagx = 1;
      break;
    }
  }
  for (int i = 0; i < n; i++) {
    int tmp = a[i] + y;
    posy = lower_bound(a, a + n, tmp) - a;
    if (a[posy] == tmp) {
      flagy = 1;
      break;
    }
  }
  if (flagx && flagy) {
    printf("%d\n", 0);
    return 0;
  } else if (flagx && !flagy) {
    printf("%d\n", 1);
    printf("%d\n", y);
    return 0;
  } else if (!flagx && flagy) {
    printf("%d\n", 1);
    printf("%d\n", x);
    return 0;
  } else {
    for (int i = 0; i < n; i++) {
      int tmp = a[i] - x;
      if (tmp > l) break;
      tmp += y;
      int pos1 = lower_bound(a, a + n, tmp) - a;
      tmp -= y;
      tmp -= y;
      int pos2 = lower_bound(a, a + n, tmp) - a;
      if (a[i] - x >= 0 && (tmp + 2 * y == a[pos1] || tmp == a[pos2])) {
        printf("%d\n", 1);
        printf("%d\n", a[i] - x);
        return 0;
      }
      tmp = a[i] + x;
      tmp += y;
      pos1 = lower_bound(a, a + n, tmp) - a;
      tmp -= y;
      tmp -= y;
      pos2 = lower_bound(a, a + n, tmp) - a;
      if (a[i] + x <= l && (tmp + 2 * y == a[pos1] || tmp == a[pos2])) {
        printf("%d\n", 1);
        printf("%d\n", a[i] + x);
        return 0;
      }
    }
    printf("%d\n", 2);
    printf("%d %d\n", x, y);
  }
  return 0;
}
