#python2
while True:
    try:
        n=int(input())
        m=map(int,raw_input().split())
        x=map(int,raw_input().split())
        diff={0}
        for i in range(n):#在确定前面砝码的基础上依次添加各个质量的砝码,每次添加后查看是否和之前的有重复
            d=diff.copy()#重复的不计入
            for j in range(x[i]):
                for k in d:
                    temp=k+m[i]*(j+1)#因为添加砝码是从一个开始添加,依次添加到每种砝码的最大数量(x[i]),所以此处为j+1
                    if temp not in d:#否则就是从0添加到x[i]-1个砝码
                        diff.add(temp)
        print(len(diff))
    except:
        break
#python3
while True:
    try:
        n=int(input())
        m=list(map(int,input().split()))#python3这块没有python2来的直接,需要用list转换一下
        x=list(map(int,input().split()))
        diff={0}
        for i in range(n):
            d=diff.copy()
            for j in range(x[i]):
                for k in d:
                    temp=k+m[i]*(j+1)
                    if temp not in d:
                        diff.add(temp)
        print(len(diff))
    except:
        break
#include <iostream>
#include <vector>
#include <algorithm>//用到find()函数
using namespace std;
int fama(int n, int *weight, int *nums){//C++函数接口用指针,不同于题目给的接口
    vector<int> res;//存入已经称好的砝码质量
    res.push_back(0);
    for(int i=1;i<=nums[0];i++)
        res.push_back(i*weight[0]);//将第一个砝码能称出的质量放入res,即依次放入1、2、...、x[0]个砝码,这些砝码的质量都为m[0]
    for(int i=1;i<n;i++){//依次添加后续质量的砝码
        int len=res.size();
        for(int j=1;j<=nums[i];j++){
            for(int k=0;k<len;k++){
                int w=res[k]+j*weight[i];
                if(find(res.begin(),res.end(),w)==res.end())
                    res.push_back(w);
            }
        }
    }
    int len=res.size();
    return len;
}
int main(){
    int n,res;
    int m[10]={0};
    int x[10]={0};
    while(cin >> n){
        for(int i=0;i<n;i++)
            cin >> m[i];
        for(int i=0;i<n;i++)
            cin >> x[i];
        res=fama(n, m, x);
        cout << res << endl;
    }
    return 0;
}