#include <bits/stdc++.h>
using namespace std;
const int MAX_SUM = 1000000 + 10;
const int MAX_M = 1000 + 5;
int N, M, K;
int T[MAX_M];
long long D[MAX_M];
bitset<MAX_SUM> dp[2]; // dp[0]: 이전, dp[1]: 현재
bitset<MAX_SUM> possible; // M개 재료로 만들 수 있는 합
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> N >> M >> K;
for (int i = 0; i < N; i++) cin >> T[i];
for (int i = 0; i < K; i++) cin >> D[i];
dp[0].reset();
dp[0][0] = 1;
int maxT = *max_element(T, T + N);
int maxSum = M * maxT;
// DP: M개 재료로 만들 수 있는 모든 합 계산
for (int cnt = 1; cnt <= M; cnt++) {
dp[1].reset();
for (int i = 0; i < N; i++) {
dp[1] |= (dp[0] << T[i]);
}
dp[0] = dp[1];
}
possible = dp[0];
unordered_set<long long> Dset(D, D + K);
long long maxD = D[K-1];
int ans = 0;
// F1 후보 범위 최적화: 0 ~ maxSum - maxD
for (int F1 = 0; F1 + maxD <= maxSum; F1++) {
bool ok = true;
for (int i = 0; i < K; i++) {
if (!possible[F1 + D[i]]) {
ok = false;
break;
}
}
if (!ok) continue;
for (long long diff = 0; diff <= maxD; diff++) {
if (Dset.count(diff)) continue;
if (possible[F1 + diff]) {
ok = false;
break;
}
}
if (ok) ans++;
}
cout << ans << "\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTUFYX1NVTSA9IDEwMDAwMDAgKyAxMDsKY29uc3QgaW50IE1BWF9NID0gMTAwMCArIDU7CgppbnQgTiwgTSwgSzsKaW50IFRbTUFYX01dOwpsb25nIGxvbmcgRFtNQVhfTV07CgpiaXRzZXQ8TUFYX1NVTT4gZHBbMl07IC8vIGRwWzBdOiDsnbTsoIQsIGRwWzFdOiDtmITsnqwKYml0c2V0PE1BWF9TVU0+IHBvc3NpYmxlOyAvLyBN6rCcIOyerOujjOuhnCDrp4zrk6Qg7IiYIOyeiOuKlCDtlakKCmludCBtYWluKCkgewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShudWxscHRyKTsKCiAgICBjaW4gPj4gTiA+PiBNID4+IEs7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgY2luID4+IFRbaV07CiAgICBmb3IgKGludCBpID0gMDsgaSA8IEs7IGkrKykgY2luID4+IERbaV07CgogICAgZHBbMF0ucmVzZXQoKTsKICAgIGRwWzBdWzBdID0gMTsKCiAgICBpbnQgbWF4VCA9ICptYXhfZWxlbWVudChULCBUICsgTik7CiAgICBpbnQgbWF4U3VtID0gTSAqIG1heFQ7CgogICAgLy8gRFA6IE3qsJwg7J6s66OM66GcIOunjOuTpCDsiJgg7J6I64qUIOuqqOuToCDtlakg6rOE7IKwCiAgICBmb3IgKGludCBjbnQgPSAxOyBjbnQgPD0gTTsgY250KyspIHsKICAgICAgICBkcFsxXS5yZXNldCgpOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgICAgIGRwWzFdIHw9IChkcFswXSA8PCBUW2ldKTsKICAgICAgICB9CiAgICAgICAgZHBbMF0gPSBkcFsxXTsKICAgIH0KICAgIHBvc3NpYmxlID0gZHBbMF07CgogICAgdW5vcmRlcmVkX3NldDxsb25nIGxvbmc+IERzZXQoRCwgRCArIEspOwogICAgbG9uZyBsb25nIG1heEQgPSBEW0stMV07CgogICAgaW50IGFucyA9IDA7CgogICAgLy8gRjEg7ZuE67O0IOuylOychCDstZzsoIHtmZQ6IDAgfiBtYXhTdW0gLSBtYXhECiAgICBmb3IgKGludCBGMSA9IDA7IEYxICsgbWF4RCA8PSBtYXhTdW07IEYxKyspIHsKICAgICAgICBib29sIG9rID0gdHJ1ZTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IEs7IGkrKykgewogICAgICAgICAgICBpZiAoIXBvc3NpYmxlW0YxICsgRFtpXV0pIHsKICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIW9rKSBjb250aW51ZTsKCiAgICAgICAgZm9yIChsb25nIGxvbmcgZGlmZiA9IDA7IGRpZmYgPD0gbWF4RDsgZGlmZisrKSB7CiAgICAgICAgICAgIGlmIChEc2V0LmNvdW50KGRpZmYpKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKHBvc3NpYmxlW0YxICsgZGlmZl0pIHsKICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKG9rKSBhbnMrKzsKICAgIH0KCiAgICBjb3V0IDw8IGFucyA8PCAiXG4iOwogICAgcmV0dXJuIDA7Cn0=