#include <bits/stdc++.h>
using namespace std;
vector<int> arr;
set<int> spots;
int main(int argc, char** argv) {
  int n, l, x, y;
  cin >> n >> l >> x >> y;
  for (int i = 0; i < n; i++) {
    int xx;
    cin >> xx;
    arr.push_back(xx);
    spots.insert(xx);
  }
  bool canX = false;
  bool canY = false;
  for (int i = 0; i < n; i++) {
    int can1 = arr[i] + x;
    int can2 = arr[i] - x;
    int can3 = arr[i] + y;
    int can4 = arr[i] - y;
    if (spots.find(can1) != spots.end() || spots.find(can2) != spots.end()) {
      canX = true;
    }
    if (spots.find(can3) != spots.end() || spots.find(can4) != spots.end()) {
      canY = true;
    }
  }
  if (canX && canY) {
    cout << 0;
    return 0;
  }
  if (canX) {
    cout << 1 << endl;
    cout << y;
    return 0;
  }
  if (canY) {
    cout << 1 << endl;
    cout << x;
    return 0;
  }
  for (int i = 1; i < n - 1; i++) {
    int can1 = arr[i] - x;
    int can2 = arr[i] + x;
    int exp1 = can1 + y;
    int exp2 = can1 - y;
    int exp3 = can2 + y;
    int exp4 = can2 - y;
    if (can1 >= 0 && can1 <= l) {
      if (spots.find(exp1) != spots.end()) {
        cout << 1 << endl;
        cout << can1 << endl;
        return 0;
      }
      if (spots.find(exp2) != spots.end()) {
        cout << 1 << endl;
        cout << can1 << endl;
        return 0;
      }
    }
    if (can2 >= 0 && can2 <= l) {
      if (spots.find(exp3) != spots.end()) {
        cout << 1 << endl;
        cout << can2 << endl;
        return 0;
      }
      if (spots.find(exp4) != spots.end()) {
        cout << 1 << endl;
        cout << can2 << endl;
        return 0;
      }
    }
  }
  int can1 = arr[0] + x;
  int can2 = arr[n - 1] - x;
  int exp1 = can1 - y;
  int exp2 = can1 + y;
  int exp3 = can2 - y;
  int exp4 = can2 + y;
  if (can1 >= 0 && can1 <= l) {
    if (spots.find(exp1) != spots.end()) {
      cout << 1 << endl;
      cout << can1 << endl;
      return 0;
    }
    if (spots.find(exp2) != spots.end()) {
      cout << 1 << endl;
      cout << can1 << endl;
      return 0;
    }
  }
  if (can2 >= 0 && can2 <= l) {
    if (spots.find(exp3) != spots.end()) {
      cout << 1 << endl;
      cout << can2 << endl;
      return 0;
    }
    if (spots.find(exp4) != spots.end()) {
      cout << 1 << endl;
      cout << can2 << endl;
      return 0;
    }
  }
  cout << 2 << endl;
  cout << x << " " << y << endl;
  return 0;
}
