using System;
using System.Collections.Generic;
using System.Linq;
namespace HJ41
{
/// <summary>
/// 核心思想:
/// 将所有砝码即使展开到一个列表中去,
/// 遍历列表中的所有砝码去求所有可能的和然后去重
/// 核心推导:这次和的集合=上次的和集合 + 这次新产生的和的集合
/// 这次新产生的和集合=上次和的集合中的和 + 新加入的砝码
/// </summary>
internal class Program
{
static void Main(string[] args)
{
int weightClass = int.Parse(Console.ReadLine());
string[] weightWeightStr = Console.ReadLine().Split();
string[] weightCountStr = Console.ReadLine().Split();
List<int> weightList = new List<int>();
for (int i = 0; i < weightClass; i++)
{
int ww = int.Parse(weightWeightStr[i]);
int wc = int.Parse(weightCountStr[i]);
//相同重量砝码,按数量添加到列表中
for (int j = 0; j < wc; j++)
{
weightList.Add(ww);
}
}
HashSet<int> sums = new HashSet<int>();
sums.Add(0);
for (int i = 0; i < weightList.Count; i++)
{
//拿到上一次(i-1)个所有可能的和的集合
List<int> temp = new List<int>(sums);
//算出加上这次这个砝码生成的新和的集合
//并将新产生的和的集合加入到最终的集合中去
for (int j = 0; j < temp.Count; j++)
{
sums.Add(temp[j] + weightList[i]);
}
}
//去重,输出
Console.WriteLine(sums.Count);
}
}
}