#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:1000000000")
using namespace std;
const int maxn = 100010;
int v[maxn];
int main() {
  int n, l, x, y;
  scanf("%d %d %d %d", &n, &l, &x, &y);
  for (int i = 0; i < n; i++) {
    scanf("%d", &v[i]);
  }
  v[n] = (int)2e9 + 10;
  bool f = false, s = false;
  for (int i = 0; i < n; i++) {
    int need = v[i] - x;
    if ((*lower_bound(v, v + n, need)) == need) {
      f = true;
    }
    need = v[i] - y;
    if ((*lower_bound(v, v + n, need)) == need) {
      s = true;
    }
  }
  if (f && s) {
    cout << 0 << endl;
    return 0;
  }
  if (!f && s) {
    cout << 1 << endl;
    cout << x << endl;
    return 0;
  }
  if (f && !s) {
    cout << 1 << endl;
    cout << y << endl;
    return 0;
  }
  for (int i = 0; i < n; i++) {
    int need = v[i] + x;
    if (need <= l) {
      if ((*lower_bound(v, v + n, need - y)) == need - y ||
          (*lower_bound(v, v + n, need + y)) == need + y) {
        cout << 1 << endl;
        cout << need << endl;
        return 0;
      }
    }
    need = v[i] - x;
    if (need >= 0) {
      if ((*lower_bound(v, v + n, need - y)) == need - y ||
          (*lower_bound(v, v + n, need + y)) == need + y) {
        cout << 1 << endl;
        cout << need << endl;
        return 0;
      }
    }
  }
  cout << 2 << endl;
  cout << x << ' ' << y << endl;
  return 0;
}
