#include <bits/stdc++.h>
using namespace std;
const int M = 100001;
long long t[M];
long long calc(long long& last, long long s, long long x, long long n,
               long long door_len) {
  if (s + n * x <= last + door_len) {
    return 0;
  }
  if (s <= last + door_len) {
    long long new_s = s + x + (last + door_len - s) / x * x;
    n -= (new_s - s) / x;
    s = new_s;
  }
  long long door_covers = door_len / x + 1;
  long long add = (n + 1 + door_covers - 1) / door_covers;
  last = s + (add - 1) * door_covers * x;
  return add;
}
long long solve(long long n, long long x, long long m, long long d) {
  n--;
  sort(t, t + m);
  long long s = x;
  long long ans = 1;
  long long last = min(t[0], s);
  for (int i = 0; i < m; ++i) {
    if (s <= t[i] && n >= 0) {
      long long ss = min(s + (t[i] - s) / x * x, s + x * n);
      ans += calc(last, s, x, (ss - s) / x, d);
      n -= (ss - s) / x + 1;
      s = ss + x;
    }
    ans += calc(last, t[i], 1, 0, d);
  }
  if (n >= 0) {
    ans += calc(last, s, x, n, d);
  }
  return ans;
}
long long solve2(int n, int x, int m, long long d) {
  vector<long long> a;
  for (int i = 1; i <= n; ++i) {
    a.push_back(x * i);
  }
  for (int i = 0; i < m; ++i) {
    a.push_back(t[i]);
  }
  sort(a.begin(), a.end());
  long long last = a[0];
  long long res = 1;
  for (int i = 0; i < a.size(); ++i) {
    if (a[i] <= last + d) {
      continue;
    }
    res++;
    last = a[i];
  }
  return res;
}
int main() {
  long long n, x;
  long long m;
  long long d;
  cin >> n >> m >> x >> d;
  for (int i = 0; i < m; ++i) {
    cin >> t[i];
  }
  cout << solve(n, x, m, d) << endl;
  return 0;
}
