class UnionFind def initialize(n) @size = Array.new(n, 1) @rank = Array.new(n, 0) @parent = [] (0..n).each do |i| @parent[i] = i end end def find(x) if @parent[x] == x x else @parent[x] = find(@parent[x]) end end def unite(x, y) x = find(x) y = find(y) return if x == y if @rank[x] < @rank[y] @parent[x] = y @size[y] += @size[x] else @parent[y] = x @size[x] += @size[y] @rank[x] += 1 if @rank[x] == @rank[y] end end def same?(x, y) find(x) == find(y) end def size(x) @size[find(x)] end end N, D, T = gets.split.map(&:to_i) X = gets.split.map(&:to_i).sort uf = UnionFind.new(N) 0.upto(N - 2) do |i| (i + 1).upto(N - 1) do |j| dist = (X[i] - X[j]).abs if dist % D == 0 && (X[j] - T * D) - (X[i] + T * D) <= D uf.unite(i, j) end end end pairs = Hash.new { |h, k| h[k] = [] } N.times do |i| pa = uf.find(i) pairs[pa] << i end ans = 0 pairs.each do |_, ids| min, max = ids.map { |id| X[id] }.minmax cnt = ((max + T * D) - (min - T * D)) / D + 1 ans += cnt end puts ans