#include <bits/stdc++.h>
using namespace std;
const long double EPS = 1e-10;
const int INF = (int)(1e9);
const long long mod = (int)(1e+9 + 7);
const int N = (int)(1e5);
int days_month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int d[N];
int n, l, x, y;
int exist_x;
int exist_y;
int exist_xaddy;
int exist_xresy;
int exist_yresx;
vector<int> ans;
int exist(int dist, int add_left) {
  int it1, it2;
  it1 = it2 = 0;
  while (it2 < n) {
    int dif = d[it2] - d[it1];
    if (dif == dist) {
      int left = d[it1] + add_left;
      if (0 <= left && left <= l) return d[it2];
    }
    if (dif < dist)
      it2++;
    else
      it1++;
  }
  return 0;
}
void solve() {
  exist_x = exist(x, x);
  exist_y = exist(y, y);
  exist_xaddy = exist(x + y, x);
  exist_xresy = exist(y - x, -x);
  exist_yresx = exist(y - x, y);
  int cnt = 0;
  if (!exist_x) cnt++;
  if (!exist_y) cnt++;
  if (cnt == 0) return;
  if (exist_xaddy) {
    ans.push_back(exist_xaddy - x);
    return;
  }
  if (exist_xresy) {
    ans.push_back(exist_xresy - y);
    return;
  }
  if (exist_yresx) {
    ans.push_back(exist_yresx + x);
    return;
  }
  if (!exist_x) ans.push_back(x);
  if (!exist_y) ans.push_back(y);
}
int main() {
  cin >> n >> l >> x >> y;
  for (int i = 0; i < n; i++) {
    scanf("%d", &d[i]);
  }
  solve();
  printf("%d\n", int(ans.size()));
  for (int x : ans) {
    printf("%d ", x);
  }
  return 0;
}
