#include <bits/stdc++.h>
using namespace std;
const int N = 5e4+5;
int a[7],f[N];
int v[N],c[N];
int main(){
int T = 0;
while(cin>>a[1]>>a[2]>>a[3]>>a[4]>>a[5]>>a[6]){
++T;
int sum = a[1]*1+a[2]*2+a[3]*3+a[4]*4+a[5]*5+a[6]*6;
if(sum==0)break;
if(sum%2!=0){
printf("Collection #%d:\n",T);
cout<<"Can't be divided."<<endl<<endl;
continue;
}
int cnt = 0;
for(int i=1;i<=6;i++){
for(int j=1;j<=a[i];j<<=1){
v[++cnt] = j*i;
c[cnt] = j*i;
a[i]-=j;
}
if(a[i]){
v[++cnt] = a[i]*i;
c[cnt] = a[i]*i;
}
}
memset(f,0,sizeof(f));
for(int i=1;i<=cnt;i++){
for(int j=sum/2;j>=v[i];j--){
f[j] = max(f[j],f[j-v[i]]+c[i]);
}
}
if(f[sum/2]==sum/2){
printf("Collection #%d:\n",T);
cout<<"Can be divided."<<endl<<endl;
continue;
}
else{
printf("Collection #%d:\n",T);
cout<<"Can't be divided."<<endl<<endl;
continue;
}
}
return 0;
}
/*
f[i][j]将i拆成j个平方的和的方法总数
f[i][j] = f[i-k*k][j-1]+1
*/
#include <bits/stdc++.h>
using namespace std;
int T;
int n;
int f[50000][10];
int main(){
cin>>T;
while(T--){
cin>>n;
memset(f,0,sizeof(f));
f[0][0] = 1;
for(int k=1;k*k<=n;k++){
for(int j=1;j<=4;j++){
for(int i=1;i<=n;i++){
if(k*k>i)continue;
f[i][j] += f[i-k*k][j-1];
}
}
}
int res = 0;
for(int i=1;i<=4;i++){
res+=f[n][i];
}
cout<<res<<endl;
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int N = 1005;
int n,H,f[N],d[N],t[N];
int dp[N][N];
int main(){
cin>>n>>H;
H*=60;
for(int i=1;i<=n;i++){
cin>>f[i];
}
for(int i=1;i<=n;i++){
cin>>d[i];
}
for(int i=1;i<n;i++){
cin>>t[i];
}
memset(dp,0xcf,sizeof(dp));
memset(dp[0],0,sizeof(dp[0]));
int res = 0;
for(int i=1;i<=n;i++){
for(int j=H;j>=5*t[i-1];j--){
dp[i][j] = dp[i-1][j-5*t[i-1]];
for(int c=1;c<=(j-5*t[i-1])/5;c++){
dp[i][j] = max(dp[i][j],dp[i-1][j-5*t[i-1]-5*c]+c*f[i]-c*(c-1)/2*d[i]);
}
res = max(res,dp[i][j]);
}
}
cout<<res<<endl;
return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int N = 4e5+5;
#define int long long
int n,L,R;
int f[N],a[N];
int q[N],tail=-1,head=0;
signed main(){
cin>>n>>L>>R;
for(int i=0;i<=n;i++){
cin>>a[i];
}
q[++tail] = 0;
int res = -1e18;
memset(f,0xcf,sizeof(f));
f[0] = 0;
for(int i=L;i<=n+R;i++){
while(tail>=head && f[i-L]>=f[q[tail]])--tail;
q[++tail] = i-L;
while(tail>=head && q[head]<i-R)head++;
int j = q[head];
f[i] = f[j]+a[i];
if(i>=n)res = max(res,f[i]);
}
cout<<res<<endl;
return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int N = 105;
int f[N][N];
int n,m,p[N][3];
int check(int x){
memset(f,0,sizeof(f));
f[0][0] = 1;
for(int i=1;i<=n;i++){
for(int j=0;j<=m;j++){
for(int k=j;k>=0;k--){
int tot = x-(j-k)*p[i][1];
if(tot<0)continue;
tot = tot/p[i][2];
if(f[i-1][k]>0)
f[i][j] = max(f[i][j],f[i-1][k]+tot);
}
}
}
return f[n][m]>=m+1;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>p[i][1]>>p[i][2];
}
int l=1,r=20000,res=-1;
while(l<=r){
int mid = (l+r)>>1;
if(check(mid)){
r = mid-1;
res = mid;
}
else l = mid+1;
}
cout<<res<<endl;
return 0;
}