/* [转]
*
* d[i][j]表示在挂上前i个物体的时,平衡度为j
* (j>0时表示左边重,j=0时表示天平平衡,j<0时表示右边重)时挂法的数量,
* 而根据题意可以确定j的取值范围为:[-7500,7500],于是可以得到状态转移方程为:
* d[i][j]+=(d[i-1][j-weigh[k]*pos[i]]),
* weigh[k]表示第k个挂钩的位置,pos[i]为第i个砝码的重量
* 由于j-weigh[k]*pos[i]可能为负数,因此统一加上7500,
* 那么初始状态d[0][7500]=1(此时表示天平平衡),表示不用物体且使得天平平衡时的方法只有一种.
*
*
*/
#include <cstdio>
#include <cstring>
using namespace std;
const int max1 = 7500, max2 = 50;
int c, g, weigh[max2], pos[max2], d[max2][max1 * 2];
int main(){
scanf("%d%d", &c, &g);
for(int i=1; i<=c; i++)
scanf("%d", &pos[i]);
for(int i=1; i<=g; i++)
scanf("%d", &weigh[i]);
memset(d, 0, sizeof(d));
d[0][max1] = 1;
for(int i=1; i<=g; i++){
for(int j=0; j<=max1*2; j++)
for(int k=1; k<=c; k++)
d[i][j] += d[i-1][j - weigh[i]*pos[k]];
}
printf("%d\n", d[g][max1]);
return 0;
}