#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
const int maxn = 1e5+10;
using namespace std;
long long k;
int n;
long long a[maxn];
long long ans=0;
long long maxt=0;
bool check(int mid)
{
long long hott=0;
for(int i=0; i<n; i++)
{
//如果小于等于mid,那么直接晾干就行,不占用烘干机
//如果大于 这个时候就用烘干机处理多出来的时间
if(a[i]>mid)
hott+=(long long)ceil((double)(a[i]-mid*1.0)/(k-1));
if(hott>mid)
return false;
}
return true;
}
void solve()
{
int l=1,r=a[n-1];
while(l<r)
{
int mid=(l+r)/2;
if(check(mid))
r=mid;
else
l=mid+1;
}
printf("%d
",l);
}
int main()
{
scanf("%d",&n);
for(int i=0; i<n; i++)
scanf("%lld",&a[i]);
scanf("%d",&k);
sort(a,a+n);
if(k==1)
{
printf("%lld
",a[n-1]);
return 0;
}
solve();
return 0;
}