package jp.fedom.challange.yuki.l3.q33; import java.math.BigInteger; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); List input = new ArrayList<>(); while (sc.hasNext()) { input.add(sc.nextLine()); } System.out.println(solve(input)); sc.close(); } // public static int solve2(List in) { // int N = Integer.valueOf(in.get(0).split(" ")[0]); // int D = Integer.valueOf(in.get(0).split(" ")[1]); // int T = Integer.valueOf(in.get(0).split(" ")[2]); // String[] X = in.get(1).split(" "); // // long pf = 0L; // // for (String s : X) { // int i = Integer.valueOf(s); // f |= 1 << (i + 18); // } // // for(int i = 0; i < T; i++){ // long k = f; // System.out.println(Long.toBinaryString(f)); // // f |= k << D | k >> D; // } // // return 1; // f.bitCount(); // } public static int solve(List in) { int N = Integer.valueOf(in.get(0).split(" ")[0]); int D = Integer.valueOf(in.get(0).split(" ")[1]); int T = Integer.valueOf(in.get(0).split(" ")[2]); String[] X = in.get(1).split(" "); BigInteger f = BigInteger.ZERO; for (String s : X) { int i = Integer.valueOf(s); f = f.flipBit(i + 30); } for(int i = 0; i < T; i++){ BigInteger l = f.shiftLeft(D); BigInteger r = f.shiftRight(D); f = f.or(l).or(r); } return f.bitCount(); } }