//太恶心了,用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);
}