#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>

using namespace std;

//有20件物品,可知即使用递归,时间复杂度为2^n,计算量在1000000左右,不会超时

int a[21];
int mem[21][41];//状态表示数组

//求拿商品方法总数,m种商品,容积capacity
int ways(int m, int capacity) //实际上就是状态计算
{
    if (capacity < 0) //当容积小于0,方法数自然为0
        return 0;
    if (capacity == 0)
    {
        mem[m][capacity] = 1;//当容积为0时,方法数自然为1
        return 1;
    }
    if (m == 0 && capacity != 0)
    {
        mem[m][capacity] = 0;//此时方法数亦为0
        return 0;
    }
    if (mem[m][capacity] != -1)
    {
        return mem[m][capacity];//mem[m][capacity]非初始值-1时,存储的正是对应的方法数
    }
    else 
    {
        //递推关系的由来:首先状态表示数组mem[m][capacity]的含义是--
        //在最多选m件物品的前提下,总体积为capacity的方法数
        //故可以推出下列递推式
        //接着来看上文各种特殊情况的判定
        //
        mem[m][capacity] = ways(m - 1, capacity) + ways(m - 1, capacity - a[m]);
        return mem[m][capacity];
    }

}
int main() {
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        cin >> a[i];
    }
    for (int i = 0; i < 21; i++)
    {
        for (int j = 0; j < 41; j++)
        {
            mem[i][j] = -1;//刷新状态数组
        }
    }
    cout << ways(n, 40) << endl;
    return 0;
}
// 64 位输出请用 printf("%lld")