#include <bits/stdc++.h>
using namespace std;
const int INF = INT_MAX / 3;
const double eps = 1e-8;
const long long LINF = 1e17;
const double DINF = 1e60;
const int maxn = 1e5 + 10;
set<int> st;
vector<int> ans;
int n, l, x, y, a[maxn];
bool gao0(int val) {
  for (int i = 1; i <= n; i++) {
    int pval = a[i] + val;
    if (st.count(pval)) return true;
  }
  return false;
}
bool gao1(int mid, int p) {
  bool exmid = false, exp = false;
  ans.clear();
  for (int i = 1; i <= n; i++) {
    int pval = a[i] + mid + p;
    if (st.count(pval) && mid + a[i] <= l && mid + a[i] >= 0) {
      ans.push_back(mid + a[i]);
      return true;
    }
    exmid |= st.count(a[i] + mid);
    exp |= st.count(a[i] + p);
  }
  if (exmid == true && exp == false) {
    ans.push_back(p);
    return true;
  }
  if (exp == true && exmid == false) {
    ans.push_back(mid);
    return true;
  }
  return false;
}
void gao() {
  if (gao0(x) && gao0(y)) {
    puts("0");
    return;
  }
  if (gao1(x, y) || gao1(y, x) || gao1(x, -y) || gao1(y, -x) || gao1(-x, y) ||
      gao1(-y, x)) {
    puts("1");
    printf("%d\n", ans[0]);
    return;
  }
  if (x == y) {
    printf("1\n%d\n", x);
    return;
  }
  printf("2\n%d %d\n", x, y);
}
int main() {
  scanf("%d%d%d%d", &n, &l, &x, &y);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
    st.insert(a[i]);
  }
  gao();
  return 0;
}
