#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;
// 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];
// D를 set으로 빠른 조회용
unordered_set<long long> Dset(D, D + K);
int ans = 0;
long long maxD = D[K-1];
long long sumLimit = MAX_SUM - 1;
for (int F1 = 0; F1 + maxD <= sumLimit; F1++) {
bool ok = true;
// F1 + D[i] 모두 가능해야 함
for (int i = 0; i < K; i++) {
if (!possible[F1 + D[i]]) {
ok = false;
break;
}
}
if (!ok) continue;
// F1과 D에 없는 값 차이 검증
for (int 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+IERbaV07CgogICAgZHBbMF0ucmVzZXQoKTsKICAgIGRwWzBdWzBdID0gMTsKCiAgICAvLyBEUDogTeqwnCDsnqzro4zroZwg66eM65OkIOyImCDsnojripQg66qo65OgIO2VqSDqs4TsgrAKICAgIGZvciAoaW50IGNudCA9IDE7IGNudCA8PSBNOyBjbnQrKykgewogICAgICAgIGRwWzFdLnJlc2V0KCk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKICAgICAgICAgICAgZHBbMV0gfD0gKGRwWzBdIDw8IFRbaV0pOwogICAgICAgIH0KICAgICAgICBkcFswXSA9IGRwWzFdOwogICAgfQogICAgcG9zc2libGUgPSBkcFswXTsKCiAgICAvLyBE66W8IHNldOycvOuhnCDruaDrpbgg7KGw7ZqM7JqpCiAgICB1bm9yZGVyZWRfc2V0PGxvbmcgbG9uZz4gRHNldChELCBEICsgSyk7CgogICAgaW50IGFucyA9IDA7CiAgICBsb25nIGxvbmcgbWF4RCA9IERbSy0xXTsKICAgIGxvbmcgbG9uZyBzdW1MaW1pdCA9IE1BWF9TVU0gLSAxOwoKICAgIGZvciAoaW50IEYxID0gMDsgRjEgKyBtYXhEIDw9IHN1bUxpbWl0OyBGMSsrKSB7CiAgICAgICAgYm9vbCBvayA9IHRydWU7CiAgICAgICAgLy8gRjEgKyBEW2ldIOuqqOuRkCDqsIDriqXtlbTslbwg7ZWoCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBLOyBpKyspIHsKICAgICAgICAgICAgaWYgKCFwb3NzaWJsZVtGMSArIERbaV1dKSB7CiAgICAgICAgICAgICAgICBvayA9IGZhbHNlOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCFvaykgY29udGludWU7CgogICAgICAgIC8vIEYx6rO8IETsl5Ag7JeG64qUIOqwkiDssKjsnbQg6rKA7KadCiAgICAgICAgZm9yIChpbnQgZGlmZiA9IDA7IGRpZmYgPD0gbWF4RDsgZGlmZisrKSB7CiAgICAgICAgICAgIGlmIChEc2V0LmNvdW50KGRpZmYpKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKHBvc3NpYmxlW0YxICsgZGlmZl0pIHsKICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAob2spIGFucysrOwogICAgfQoKICAgIGNvdXQgPDwgYW5zIDw8ICJcbiI7CiAgICByZXR1cm4gMDsKfQ==