#include<iostream>        //二分答案后贪心验证可行性
using namespace std;
int n,m,arr[1000];
bool verify(int c)        //对组数c进行二分
{
    int p=0;
    for(int i=0;i<n;++i)
        p+=min(arr[i],c);    //如果arr[i]<c,自然是加上arr[i];若arr[i]>=c,因为一共就c组,所以只能取c
    if(p>=m*c)        //c组,每组 m 条项链,返回1说明可以分成 c组
        return 1;    
    return 0;
}
int main()
{
    while(cin>>n&&n)
    {
        int sum=0;
        for(int i=0;i<n;++i)
        {
            cin>>arr[i];
            sum+=arr[i];
        }
        cin>>m;
        int s=0,t=sum/m,mid;    //组数的上下界s,t
        while(s<t-1)
        {
            mid=(s+t)/2;
            if(verify(mid))
                s=mid;
            else
                t=mid-1;
        }
        if(verify(t))
            cout<<t<<endl;
        else
            cout<<s<<endl;
    }
    return 0;
}