#include <bits/stdc++.h>
using namespace std;

typedef pair<int, int> PII;

vector< vector<int> > mask[10][10];
vector<int> Q;

void dfs(int k, int n, int m)
{
	if (k >= n) {
		mask[n][m].push_back(Q);
		return;
	}
	for (int i = 1; i <= m; i++) {
		if (k == 0 || i >= Q[k - 1]){
			Q.push_back(i);
			dfs(k + 1, n, m);
			Q.resize(Q.size() - 1);
		} 
	}
}

bool cmp(const vector<int> &a, const vector<int> &b)
{
    if (a.size() == 2 && a[0] == 1 && a[1] == 2){
        if (b.size() == 2 && b[0] == 1 && b[1] == 1) {
            flag = 1;
        }
    }
	for (int i = 0; i < a.size(); i++) {
		if (i == b.size() || a[i] <= b[i]) return 0;
	}
	return 1;
}

int a[10];
vector<PII> dp[2];
map<vector<int>, int> S;
vector<vector<int> > U;
int vis[7000][7000];

int main()
{
	ios::sync_with_stdio(false);
	int cnt = 0;
	for (int i = 1; i <= 7; i++) {
		for (int j = 1; j <= 7; j++){
			dfs(0, i, j);
			for (int k = 0; k < mask[i][j].size(); k++){
				vector<int> now = mask[i][j][k];
				S[now] = ++cnt;
				U.push_back(now);
			}
		}
	}
	for (int i = 0; i < U.size(); i++) {
		for (int j = 0; j < U.size(); j++) {
			vis[i + 1][j + 1] = cmp(U[i], U[j]);
		}
	}
	int n, m;
	while (cin >> n) {
		for (int i = 0; i < n; i++) cin >> a[i];
		cin >> m;
		dp[0].clear();
		for (int i = 0; i < mask[a[0]][m].size(); i++) {
			int delta = S[mask[a[0]][m][i]];
			dp[0].push_back(PII(delta, 1));
		}
		for (int i = 1; i < n; i++) {
			dp[i & 1].clear();
			for (int x = 0; x < mask[a[i]][m].size(); x++) {
				vector<int> now = mask[a[i]][m][x];
				int c1 = S[now];
				int delta = 0;
				for (int y = 0; y < dp[(i - 1) & 1].size(); y++) {
					int c0 = dp[(i - 1) & 1][y].first;
					int w  = dp[(i - 1) & 1][y].second;	
					if (vis[c1][c0]) {
						delta += w;
					}
				}
				dp[i & 1].push_back(PII(c1, delta));
			}
		}
		int ans = 0;
		for (int i = 0; i < dp[(n - 1) & 1].size(); i++) {
			ans += dp[(n - 1) & 1][i].second;
		}
		cout << ans << '\n';
	}	
	return 0;
}
