#include <bits/stdc++.h>
using namespace std;
const int INF = 1 << 30;
const int MAXN = 100010;
int N, L, x, y;
int a[MAXN];
bool exist(int x) {
  for (int i = 0; i < N; i++) {
    if (a[i] >= x && *lower_bound(a, a + N, a[i] - x) == a[i] - x) return true;
  }
  return false;
}
int solve(int p, int q) {
  for (int i = 0; a[i] + p < L && i < N; i++) {
    int w = a[i] + p;
    if (q + w && (*lower_bound(a, a + N, q + w) == q + w)) return w;
    if (q <= w && *lower_bound(a, a + N, w - q) == w - q) return w;
  }
  for (int i = 0; i < N; i++) {
    if (a[i] >= p) {
      int w = a[i] - p;
      if (q + w < L && (*lower_bound(a, a + N, q + w) == q + w)) return w;
      if (q <= w && *lower_bound(a, a + N, w - q) == w - q) return w;
    }
  }
  return -1;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cin >> N >> L >> x >> y;
  for (int i = 0; i < N; i++) cin >> a[i];
  bool exist1 = exist(x);
  bool exist2 = exist(y);
  if (exist1 && exist2)
    cout << 0 << endl;
  else if (exist1) {
    cout << 1 << endl;
    cout << y << endl;
  } else if (exist2) {
    cout << 1 << endl;
    cout << x << endl;
  } else {
    int ans1 = solve(x, y);
    int ans2 = solve(y, x);
    if (ans1 != -1) {
      cout << 1 << endl;
      cout << ans1 << endl;
    } else if (ans2 != -1) {
      cout << 1 << endl;
      cout << ans2 << endl;
    } else {
      cout << 2 << endl;
      cout << x << " " << y << endl;
    }
  }
  return 0;
}
