#include <bits/stdc++.h>

using namespace std;

const int MAXN = 2007;

int prefA[MAXN];
int prefB[MAXN];
int DP[MAXN][MAXN];


int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int n, m, x;
    cin >> n >> m;
    //sumy prefiksowe obu talerzy
    for(int i = 1; i <= n; i++){
        cin >> x;
        prefA[i] = prefA[i-1]+x;
    }
    for(int i = 1; i <= m; i++){
        cin >> x;
        prefB[i] = prefB[i-1]+x;
    }

    //dynamik
    //bierzemy wszystkie nalesniki z obu stosow i odejmujemy najgorszy wynik jesli jeden z gornych nalesnikow jest zabrany
    for(int i = 0; i <= n; i++){
        for(int j = 0; j <= m; j++){
            if(i==0 && j==0){
                DP[i][j] = 0;
            }else if(i == 0){
                DP[i][j] = prefA[i] + prefB[j] - DP[i][j-1];
            }else if(j == 0){
                DP[i][j] = prefA[i] + prefB[j] - DP[i-1][j];
            }else{
                DP[i][j] = prefA[i] + prefB[j] - min(DP[i-1][j], DP[i][j-1]);
            }
            cout << i << " " << j << " " << DP[i][j] << "\n";
        }
    }

    cout << DP[n][m] << "\n";
    return 0;
}