#include <bits/stdc++.h>
using namespace std;
vector<int> pnt;
int main() {
  ios_base::sync_with_stdio(0);
  ;
  int n, l, x, y, p;
  cin >> n >> l >> x >> y;
  for (int i = 0; i < n; i++) {
    cin >> p;
    pnt.push_back(p);
  }
  int ok1 = 0;
  for (int i = 0; i < n && !ok1; i++) {
    int lo = i + 1;
    int hi = n - 1;
    int mid;
    while (lo <= hi) {
      mid = (lo + hi) >> 1;
      int sum = pnt[mid] - pnt[i];
      if (sum == x) {
        ok1 = 1;
        break;
      }
      if (sum < x) {
        lo = mid + 1;
      } else {
        hi = mid - 1;
      }
    }
  }
  int ok2 = 0;
  for (int i = 0; i < n && !ok2; i++) {
    int lo = i + 1;
    int hi = n - 1;
    int mid;
    while (lo <= hi) {
      mid = (lo + hi) >> 1;
      int sum = pnt[mid] - pnt[i];
      if (sum == y) {
        ok2 = 1;
        break;
      }
      if (sum < y) {
        lo = mid + 1;
      } else {
        hi = mid - 1;
      }
    }
  }
  if (ok1 && ok2) {
    cout << 0 << "\n";
  } else if (ok1) {
    cout << 1 << "\n";
    cout << y << "\n";
  } else if (ok2) {
    cout << 1 << "\n";
    cout << x << "\n";
  } else {
    int ok = 0;
    for (int i = 0; i < n && !ok; i++) {
      int diff = (((pnt[i] - x) < 0) ? (-(pnt[i] - x)) : (pnt[i] - x));
      int df = y;
      int tmp1 = pnt[i] + x;
      int tmp2 = tmp1 + df;
      if (tmp1 >= 0 && tmp1 <= l && tmp2 >= 0 && tmp2 <= l &&
          binary_search((pnt).begin(), (pnt).end(), tmp2)) {
        cout << 1 << "\n";
        cout << tmp1 << "\n";
        ok = 1;
        return 0;
      }
      tmp2 = tmp1 - df;
      if (tmp1 >= 0 && tmp1 <= l && tmp2 >= 0 && tmp2 <= l &&
          binary_search((pnt).begin(), (pnt).end(), tmp2)) {
        cout << 1 << "\n";
        cout << tmp1 << "\n";
        ok = 1;
        return 0;
      }
      tmp1 = pnt[i] - x;
      tmp2 = tmp1 + df;
      if (tmp1 >= 0 && tmp1 <= l && tmp2 >= 0 && tmp2 <= l &&
          binary_search((pnt).begin(), (pnt).end(), tmp2)) {
        cout << 1 << "\n";
        cout << tmp1 << "\n";
        ok = 1;
        return 0;
      }
      tmp2 = tmp1 - df;
      if (tmp1 >= 0 && tmp1 <= l && tmp2 >= 0 && tmp2 <= l &&
          binary_search((pnt).begin(), (pnt).end(), tmp2)) {
        cout << 1 << "\n";
        cout << tmp1 << "\n";
        ok = 1;
        return 0;
      }
    }
    swap(x, y);
    for (int i = 0; i < n && !ok; i++) {
      int diff = (((pnt[i] - x) < 0) ? (-(pnt[i] - x)) : (pnt[i] - x));
      int df = y;
      int tmp1 = pnt[i] + x;
      int tmp2 = tmp1 + df;
      if (tmp1 >= 0 && tmp1 <= l && tmp2 >= 0 && tmp2 <= l &&
          binary_search((pnt).begin(), (pnt).end(), tmp2)) {
        cout << 1 << "\n";
        cout << tmp1 << "\n";
        ok = 1;
        return 0;
      }
      tmp2 = tmp1 - df;
      if (tmp1 >= 0 && tmp1 <= l && tmp2 >= 0 && tmp2 <= l &&
          binary_search((pnt).begin(), (pnt).end(), tmp2)) {
        cout << 1 << "\n";
        cout << tmp1 << "\n";
        ok = 1;
        return 0;
      }
      tmp1 = pnt[i] - x;
      tmp2 = tmp1 + df;
      if (tmp1 >= 0 && tmp1 <= l && tmp2 >= 0 && tmp2 <= l &&
          binary_search((pnt).begin(), (pnt).end(), tmp2)) {
        cout << 1 << "\n";
        cout << tmp1 << "\n";
        ok = 1;
        return 0;
      }
      tmp2 = tmp1 - df;
      if (tmp1 >= 0 && tmp1 <= l && tmp2 >= 0 && tmp2 <= l &&
          binary_search((pnt).begin(), (pnt).end(), tmp2)) {
        cout << 1 << "\n";
        cout << tmp1 << "\n";
        ok = 1;
        return 0;
      }
    }
    swap(x, y);
    cout << 2 << "\n";
    cout << x << " " << y << endl;
  }
  return 0;
}
