1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include <vector>

namespace {
	using std::ios_base, std::cin, std::cout;
	using ds_t = std::vector<size_t>;

	size_t ile_sie_miesci(size_t h, size_t w, size_t r, ds_t const & ds) {
		if (h == 0 || w == 0) {
			return 0;
		} else if (r == 0) {
			return (h / ds[r]) * (w / ds[r]);
		} else {
			size_t tmp;
			if (w < h) tmp = h, h = w, w = tmp;
			size_t res = (h / ds[r]) * (w / ds[r]);
			if (res > 0) {
				tmp = w % ds[r];
				res += ile_sie_miesci(h, tmp, r - 1, ds);
				res += ile_sie_miesci(h % ds[r], w - tmp, r - 1, ds);
			} else {
				res = ile_sie_miesci(h, w, r - 1, ds);
			}
			return res;
		}
	}
} // namespace

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

	// Wprowadzenie danych
	size_t h, w, di;
	size_t n;
	ds_t ds;
	cin >> h;
	cin >> w;
	cin >> n;
	for (size_t k = 0; k < n; ++k) {
		cin >> di;
		ds.push_back(di);
	}

	// Obliczenie wyniku
	if (h % ds[0] != 0 || w % ds[0] != 0) {
		cout << -1 << '\n';
	} else {
		cout << ile_sie_miesci(h, w, n - 1, ds) << '\n';
	}
}