#include <bits/stdc++.h>
using namespace std;
int n, l, x[2];
set<int> ss;
map<int, int> mp, bp;
int main() {
  cin >> n >> l >> x[0] >> x[1];
  for (int i = 0; i < n; i++) {
    int a;
    scanf("%d", &a);
    ss.insert(a);
  }
  bool flag[2] = {0};
  for (auto v = ss.begin(); v != ss.end(); v++) {
    if (ss.count(*v + x[0])) flag[0] = 1;
    if (ss.count(*v + x[1])) flag[1] = 1;
  }
  if (flag[0] && flag[1]) {
    puts("0");
    return 0;
  }
  if (flag[0] || flag[1]) {
    puts("1");
    for (int i = 0; i < 2; i++)
      if (!flag[i]) printf("%d\n", x[i]);
    return 0;
  }
  int blog = -1;
  for (auto v = ss.begin(); v != ss.end(); v++) {
    if (ss.count(*v + x[0] + x[1])) blog = *v + x[0];
    if (*v + x[0] <= l) mp[*v + x[0]]++;
    if (*v + x[1] <= l) mp[*v + x[1]]++;
    if (mp[*v + x[0]] == 2) blog = *v + x[0];
    if (mp[*v + x[1]] == 2) blog = *v + x[1];
  }
  if (blog != -1) {
    printf("1\n%d\n", blog);
    return 0;
  }
  blog = -1;
  for (auto v = ss.begin(); v != ss.end(); v++) {
    if (*v - x[0] >= 0) bp[*v - x[0]]++;
    if (*v - x[1] >= 0) bp[*v - x[1]]++;
    if (bp[*v - x[0]] == 2) blog = *v - x[0];
    if (bp[*v - x[1]] == 2) blog = *v - x[1];
  }
  if (blog != -1) {
    printf("1\n%d\n", blog);
    return 0;
  }
  printf("2\n%d %d\n", x[0], x[1]);
  return 0;
}
