#include <iostream>
#include <vector>

using namespace std;

using lint = long long;
using ldouble = long double;

const int INF = 1 << 30;

int N, M;
vector<int> A, B;
int dp[51][51][51][51][2][2];

// 1がスタックに積んでいるのが[l1, r1)
// 2がスタックに積んでいるのが[l2, r2)
// 今t+1のターン
// p : スタックが空になってからパスしたか
int rec(int l1, int l2, int r1, int r2, int t, int p) {
    int& ret = dp[l1][l2][r1][r2][t][p];
    if (ret > -INF) return ret;

    if (t == 0) {  // スコアを最大化
        // パスする場合
        if (p == 1) {
            ret = 0;  // ゲーム終了
        } else {
            int score = 0;
            for (int i = l1; i < r1; ++i) score += A[i];
            for (int j = l2; j < r2; ++j) score -= B[j];
            bool empty = (l1 == r1) && (l2 == r2);  // スタックが空か
            ret = score + rec(r1, r2, r1, r2, 1 - t, empty);
        }

        // カードを出す場合
        if (r1 < N) {
            if (A[r1] == 0) {
                // 「相手の」カードを全部消す
                ret = max(ret, rec(l1, r2, r1 + 1, r2, 1 - t, 0));
            } else {
                ret = max(ret, rec(l1, l2, r1 + 1, r2, 1 - t, 0));
            }
        }

    } else {  // スコアを最小化
        if (p == 1) {
            ret = 0;
        } else {
            int score = 0;
            for (int i = l1; i < r1; ++i) score += A[i];
            for (int j = l2; j < r2; ++j) score -= B[j];
            bool empty = (l1 == r1) && (l2 == r2);  // スタックが空か
            ret = score + rec(r1, r2, r1, r2, 1 - t, empty);
        }

        if (r2 < M) {
            if (B[r2] == 0) {
                ret = min(ret, rec(r1, l2, r1, r2 + 1, 1 - t, 0));
            } else {
                ret = min(ret, rec(l1, l2, r1, r2 + 1, 1 - t, 0));
            }
        }
    }
    return ret;
}

int main() {
    cin >> N >> M;

    A.resize(N);
    for (auto& a : A) {
        cin >> a;
        if (a < 0) a = 0;
        // 区間和を求めるために都合が悪いので、妨害カードを0にする
    }
    B.resize(M);
    for (auto& b : B) {
        cin >> b;
        if (b < 0) b = 0;
    }

    fill(dp[0][0][0][0][0], dp[51][0][0][0][0], -INF);
    cout << rec(0, 0, 0, 0, 0, 0) << endl;
    return 0;
}

