//太恶心了,用cin过不去,换了scanf才过,调了一个多小时
//二分
#include<iostream>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
int n;
ll k;
ll arr[100005];
bool pd(ll t)//判断当前时间是否可行
{
ll m=t;//定义一个m代表t
for(int i=1;i<=n;i++)
{
if(arr[i]>m) t-=ceil((arr[i]-m)/(k-1.0));//吹风机使时间不断减少
if(t<0) return false;//如果时间不够了,返回false
}
return true;
}
int main()
{
int i;
ll ans,maxn=0;
scanf("%d",&n);
for(i=1;i<=n;i++) {scanf("%lld",&arr[i]);maxn=max(maxn,arr[i]);}
scanf("%lld",&k);
if(k==1)//k==1时特判,输出最大时间即可
{
cout<<maxn<<endl;
return 0;
}
//二分
ll l=1,r=maxn,mid;//右边界为时间最大值,全部都自然干
while(l<=r)
{
mid=(l+r)>>1;
if(pd(mid)) {r=mid-1;ans=min(ans,mid);}
else l=mid+1;
}
printf("%lld",ans);
}