#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int N, M, K;
cin >> N >> M >> K;
vector<int> T(N);
for(int i=0;i<N;i++) cin >> T[i];
vector<long long> D(K);
for(int i=0;i<K;i++) cin >> D[i];
// Meet-in-the-middle: N/2
int n1 = N/2, n2 = N-n1;
vector<int> L(T.begin(), T.begin()+n1), R(T.begin()+n1, T.end());
auto getSums = [&](vector<int>& arr) {
vector<unordered_set<int>> sums(M+1);
sums[0].insert(0);
for(int t: arr){
for(int cnt=M;cnt>=1;cnt--){
for(auto x: sums[cnt-1])
sums[cnt].insert(x+t);
}
}
return sums;
};
auto sumsL = getSums(L);
auto sumsR = getSums(R);
// 모든 M개 합 생성
set<int> allSums;
for(int i=0;i<=M;i++){
for(int l: sumsL[i]){
int rcnt = M-i;
if(rcnt<0 || rcnt>sumsR.size()-1) continue;
for(int r: sumsR[rcnt])
allSums.insert(l+r);
}
}
long long maxD = D.back(), minD = D[0]; // D[0]은 0
// D에서 F1 후보에 영향을 주는 값 미리 계산
set<long long> forbidden;
for(long long d: D) forbidden.insert(d);
int ans=0;
for(int F1: allSums){
bool ok = true;
for(long long d: forbidden){
if(allSums.find(F1+d)==allSums.end()){ ok=false; break;}
}
if(!ok) continue;
// F1+D 범위 안에 다른 sum이 있으면 안됨
for(auto s: allSums){
long long diff = s-F1;
if(diff<0 || diff>maxD) continue;
if(forbidden.find(diff)==forbidden.end()){ ok=false; break;}
}
if(ok) ans++;
}
cout << ans << "\n";
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoMCk7CgogICAgaW50IE4sIE0sIEs7CiAgICBjaW4gPj4gTiA+PiBNID4+IEs7CiAgICB2ZWN0b3I8aW50PiBUKE4pOwogICAgZm9yKGludCBpPTA7aTxOO2krKykgY2luID4+IFRbaV07CiAgICB2ZWN0b3I8bG9uZyBsb25nPiBEKEspOwogICAgZm9yKGludCBpPTA7aTxLO2krKykgY2luID4+IERbaV07CgogICAgLy8gTWVldC1pbi10aGUtbWlkZGxlOiBOLzIKICAgIGludCBuMSA9IE4vMiwgbjIgPSBOLW4xOwogICAgdmVjdG9yPGludD4gTChULmJlZ2luKCksIFQuYmVnaW4oKStuMSksIFIoVC5iZWdpbigpK24xLCBULmVuZCgpKTsKCiAgICBhdXRvIGdldFN1bXMgPSBbJl0odmVjdG9yPGludD4mIGFycikgewogICAgICAgIHZlY3Rvcjx1bm9yZGVyZWRfc2V0PGludD4+IHN1bXMoTSsxKTsKICAgICAgICBzdW1zWzBdLmluc2VydCgwKTsKICAgICAgICBmb3IoaW50IHQ6IGFycil7CiAgICAgICAgICAgIGZvcihpbnQgY250PU07Y250Pj0xO2NudC0tKXsKICAgICAgICAgICAgICAgIGZvcihhdXRvIHg6IHN1bXNbY250LTFdKQogICAgICAgICAgICAgICAgICAgIHN1bXNbY250XS5pbnNlcnQoeCt0KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gc3VtczsKICAgIH07CgogICAgYXV0byBzdW1zTCA9IGdldFN1bXMoTCk7CiAgICBhdXRvIHN1bXNSID0gZ2V0U3VtcyhSKTsKCiAgICAvLyDrqqjrk6AgTeqwnCDtlakg7IOd7ISxCiAgICBzZXQ8aW50PiBhbGxTdW1zOwogICAgZm9yKGludCBpPTA7aTw9TTtpKyspewogICAgICAgIGZvcihpbnQgbDogc3Vtc0xbaV0pewogICAgICAgICAgICBpbnQgcmNudCA9IE0taTsKICAgICAgICAgICAgaWYocmNudDwwIHx8IHJjbnQ+c3Vtc1Iuc2l6ZSgpLTEpIGNvbnRpbnVlOwogICAgICAgICAgICBmb3IoaW50IHI6IHN1bXNSW3JjbnRdKQogICAgICAgICAgICAgICAgYWxsU3Vtcy5pbnNlcnQobCtyKTsKICAgICAgICB9CiAgICB9CgogICAgbG9uZyBsb25nIG1heEQgPSBELmJhY2soKSwgbWluRCA9IERbMF07IC8vIERbMF3snYAgMAogICAgLy8gROyXkOyEnCBGMSDtm4Trs7Tsl5Ag7JiB7Zal7J2EIOyjvOuKlCDqsJIg66+466asIOqzhOyCsAogICAgc2V0PGxvbmcgbG9uZz4gZm9yYmlkZGVuOwogICAgZm9yKGxvbmcgbG9uZyBkOiBEKSBmb3JiaWRkZW4uaW5zZXJ0KGQpOwoKICAgIGludCBhbnM9MDsKICAgIGZvcihpbnQgRjE6IGFsbFN1bXMpewogICAgICAgIGJvb2wgb2sgPSB0cnVlOwogICAgICAgIGZvcihsb25nIGxvbmcgZDogZm9yYmlkZGVuKXsKICAgICAgICAgICAgaWYoYWxsU3Vtcy5maW5kKEYxK2QpPT1hbGxTdW1zLmVuZCgpKXsgb2s9ZmFsc2U7IGJyZWFrO30KICAgICAgICB9CiAgICAgICAgaWYoIW9rKSBjb250aW51ZTsKICAgICAgICAvLyBGMStEIOuylOychCDslYjsl5Ag64uk66W4IHN1beydtCDsnojsnLzrqbQg7JWI65CoCiAgICAgICAgZm9yKGF1dG8gczogYWxsU3Vtcyl7CiAgICAgICAgICAgIGxvbmcgbG9uZyBkaWZmID0gcy1GMTsKICAgICAgICAgICAgaWYoZGlmZjwwIHx8IGRpZmY+bWF4RCkgY29udGludWU7CiAgICAgICAgICAgIGlmKGZvcmJpZGRlbi5maW5kKGRpZmYpPT1mb3JiaWRkZW4uZW5kKCkpeyBvaz1mYWxzZTsgYnJlYWs7fQogICAgICAgIH0KICAgICAgICBpZihvaykgYW5zKys7CiAgICB9CgogICAgY291dCA8PCBhbnMgPDwgIlxuIjsKfQ==