#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const int N = 1e5 + 5;
long long t[N];
int main() {
  int n, m;
  long long a, d;
  cin >> n >> m >> a >> d;
  for (int i = 0; i < m; ++i) scanf("%lld", &t[i]);
  long long st = min(t[0], a);
  long long ans = 0;
  long long q = d / a + 1;
  while (n * a >= st && t[m - 1] >= st) {
    int pos = lower_bound(t, t + m, st) - t;
    long long nxt = st + d + 1;
    if (t[pos] >= nxt) {
      long long g = t[pos] / a;
      long long now = st / a;
      long long limit = (n - now) / q;
      long long gg = st + limit * q * a;
      if (gg + d < t[pos]) {
        st = t[pos];
        ans += limit + 1;
        break;
      }
      long long f = (g - now) / q;
      ans += f;
      st = (now + f * q) * a;
      if (st + d < t[pos]) {
        ++ans;
        st = t[pos];
      }
    }
    ++ans;
    nxt = st + d + 1;
    pos = lower_bound(t, t + m, nxt) - t;
    st = (nxt / a + (nxt % a != 0)) * a;
    if (pos < m) st = min(st, t[pos]);
  }
  if (n * a >= st) {
    long long s = n - (st / a) + 1;
    ans += (s / q) + (s % q != 0);
  }
  while (t[m - 1] >= st) {
    ++ans;
    long long nxt = st + d + 1;
    int pos = lower_bound(t, t + m, nxt) - t;
    if (pos >= m) break;
    st = t[pos];
  }
  printf("%lld\n", ans);
}
