#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define rep(i,n) for(int i=0;i<(n);i++) #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define sz(x) ((int)(x).size()) #define pb push_back using ll = long long; using namespace std; templatebool chmax(T &a, const T &b) { if (abool chmin(T &a, const T &b) { if (b> N >> X >> Y; vector A(X),B(Y); rep(i,X) cin >> A[i]; rep(i,X) A[i]--; rep(i,Y) cin >> B[i]; rep(i,Y) B[i]--; vector> C(N,vector(N)); rep(i,N) rep(j,N) cin >> C[i][j]; ll sum = 0; rep(i,N) rep(j,N) sum += C[i][j]; sum /= 2; atcoder::mf_graph G(N+2); int S = N, T = N+1; ll inf = 1LL<<60; rep(i,X){ G.add_edge(S,A[i],inf); } rep(i,Y){ G.add_edge(B[i],T,inf); } rep(i,N){ rep(j,N){ G.add_edge(i,j,C[i][j]); } } cout << sum - G.flow(S,T) << endl; return 0; }