#include <vector>
#include <list>
#include <map>
#include <set>
#include <string>
#include <cstring>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>

using namespace std;
long a[111100] = {};
set<long> s;
long n,m,l,x,y;

int main () {
    cin >> n >> l >> x >> y;
    for (int i = 0; i < n; i ++){
        cin >> a[i];
        s.insert(a[i]);
    }
    long ans = 0;
    for (int i = 0; i < n; i ++){
        if (ans % 2 == 0)
            if (s.count(a[i]-x) > 0 || s.count(a[i]+x) > 0) 
                ans = ans | 1;
        if ((ans & 2) == 0) { cout << a[i] + y;
            if (s.count(a[i]-y) > 0 || s.count(a[i]+y) > 0) 
                ans = ans | 2;     
               }
        cout << a[i] + y<< " " << ans << endl;
    }
    
    if (ans == 3) {
        cout << 0;
        return 0;
    }
    if (ans == 1) {
        printf("%d\n%d",1,y);
        return 0;
    }
    if (ans == 2) {
        printf("%d\n%d",1,x);
        return 0;
    }
    for (int i =0; i < n; i ++) {
        long t = a[i] - x;
        if (t > 0) {
            if (s.count(t-y) > 0 || s.count(t+y) > 0) {
                printf("%d\n%d",1,t);
                return 0;
            }
        }

        t = a[i] + x;
        if (t <= l) {
            if (s.count(t-y) > 0 || s.count(t+y) > 0) {
                printf("%d\n%d",1,t);
                return 0;
            }
        }        
    }
    printf("%d\n%d %d",2,x,y);
}
