#include #include #include using namespace std; #define REP(i,n) for(int i = 0; i < static_cast(n); ++i) #define REP2(i,s,n) for(int i = (s); i < static_cast(n); ++i) typedef vector::iterator vit; class RoadSquare { vector h, w, h2, w2; public: RoadSquare (int n, int m): h(n), w(m) {} void input() { REP(i, h.size()) { scanf("%d", &h[i]); } REP(i, w.size()) { scanf("%d", &w[i]); } } int calc() { REP(i, h.size()) { int hsum = 0; REP2(j, i, h.size()) { hsum += h[j]; h2.push_back(hsum); } } REP(i, w.size()) { int wsum = 0; REP2(j, i, w.size()) { wsum += w[j]; w2.push_back(wsum); } } sort(w2.begin(), w2.end()); int count = 0; REP(i, h2.size()) { pair p = equal_range(w2.begin(), w2.end(), h2[i]); count += distance(p.first, p.second); } return count; } }; int main() { int n, m; while (scanf("%d%d", &n, &m), n) { RoadSquare rs(n, m); rs.input(); printf("%d\n", rs.calc()); } }