容斥 && 排列组合即可
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e5 + 10;
int f[N];
int g(int x) {
if (x < 0) return 0;
return f[x];
}
void init(int x) {
for (int i = x; i <= N; i ++ )
f[i] += f[i - x];
}
void e(int&x, int y) {
x = (x + 1) * y;
return ;
}
signed main() {
int c1, c2, c3, c4, t;
cin >> c1 >> c2 >> c3 >> c4 >> t;
f[0] = 1;
init(c1), init(c2), init(c3), init(c4);
while (t -- ) {
int d1, d2, d3, d4, s;
cin >> d1 >> d2 >> d3 >> d4 >> s;
e(d1, c1), e(d2, c2), e(d3, c3), e(d4, c4);
cout << g(s) - g(s - d1) - g(s - d2) - g(s - d3) - g(s - d4) + g(s - d1 - d2) + g(s - d1 - d3) + g(s - d1 - d4) +g(s - d2 - d3) + g(s - d2 - d4) + g(s - d3 - d4) - g(s - d1 - d2 - d3) - g(s - d1 - d2 - d4) - g(s - d1 - d3 - d4) - g(s - d2 - d3 - d4) + g(s - d1 - d2 - d3 - d4) << "\n";
}
}