n=int(input()) z=[0]*(n+1) q,w=0,n while w-q>1: m=(q+w)//2 if (m+1)*m//2<=n: q=m else: w=m x=[0]*q y=[(i+1)*(i+2)//2 for i in range(q)] for i in range(q-1,-1,-1): p=0 for j in range(y[i],n+1,y[i]): if z[j]: break p+=1 x[i]=p dp=[1<<60]*(n+1);p=0;dp[0]=0 for i in y: for j in range(n,-1,-1): if dp[j]==1<<60: continue for l in range(1,x[p]+1): if j+l*i>n: break dp[j+l*i]=min(dp[j+l*i],dp[j]+l) p+=1 print(dp[n])