#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
const long long inf = 2e18;
long long n, m, a, d;
long long arr[N];
int as;
long long calc(long long start, long long idx) {
  if (start > n * a and idx == m) return 0;
  long long nxt = upper_bound(arr + idx, arr + m, start + d) - arr;
  long long nxt2 = upper_bound(arr + idx, arr + m, start) - arr;
  if (start % a == 0 and arr[nxt2] > start + d) {
    long long temp = min((arr[nxt2] / a) * a, n * a);
    long long x = ceil((double)((temp - start) / a) / (double)(1 + (d / a)));
    if (x == 0) goto A;
    long long y = start + a * (1 + (d / a)) * x;
    long long z = y - (a * (1 + (d / a)) - d);
    if (arr[nxt2] < y and arr[nxt2] > z) {
      return x + calc(arr[nxt2], nxt2);
    }
    if (arr[nxt2] < y and arr[nxt2] <= z) {
      long long tmp = upper_bound(arr + idx, arr + m, z) - arr;
      if (arr[tmp] <= y) {
        return x + calc(arr[tmp], tmp);
      } else {
        if (y <= n * a)
          return x + calc(y, tmp);
        else
          return x + calc(arr[tmp], tmp);
      }
    }
    if (y <= n * a)
      return x + calc(y, nxt2);
    else
      return x + calc(arr[nxt2], nxt2);
  }
A:
  long long val = a * (1 + (start + d) / a);
  long long val2 = arr[nxt];
  if (val <= n * a) {
    if (val > start + d) {
      return 1 + calc(min(val, val2), nxt);
    }
  } else
    return 1 + calc(val2, nxt);
}
int main() {
  ios_base::sync_with_stdio(0);
  ;
  cin >> n >> m >> a >> d;
  for (int i = 0; i < m; i++) cin >> arr[i];
  arr[m] = inf;
  long long ans = calc(min(arr[0], a), 0);
  cout << ans << endl;
}
