n,m,t,*a=map(int,open(0).read().split()) def judge(x): d=[0]*n r=0 for i in a: if d[i-1]+1<=x: d[i-1]+=1 else: r+=1 for i in d: if r<=0: break if i+t<=x: nr=(x-i)//t r-=nr return r<=0 ok,ng=1<<60,0 while abs(ok-ng)>1: mid=ok+ng>>1 if judge(mid): ok=mid else: ng=mid print(ok)