import java.io.PrintStream;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = null;
		PrintStream out = null;
		try {
			sc = new Scanner(System.in);
			out = System.out;
			exec(sc, out);
		} catch (Exception e) {
			e.printStackTrace();
			System.exit(1);
		} finally {
			if(out != null) {
				out.close();
			}
			if(sc != null) {
				sc.close();
			}
		}
		System.exit(0);
	}
	public static void exec(final Scanner sc, final PrintStream out) throws Exception{
		final int N = sc.nextInt();
		final long[] A = new long[N+1];
		final long[] B = new long[N];
		for(int i=0;i<N+1;i++) {
			A[i] = sc.nextLong();
		}
		for(int i=0;i<N;i++) {
			B[i] = sc.nextLong();
		}
		long left = 0;
		long sum = 0;
		for(int i=0;i<N;i++) {
			if(A[i]>B[i]+left) {
				// 全消費しても倒しきれない。
				sum+=(B[i]+left);
				left = 0;
			}else {
				// リソース余り(全部倒せる)
				sum+=A[i];
				if(A[i]>left) {
					// 積み立て全消費
					// 積み立てからのあまりを引き継ぐ。
					left = (B[i])-(A[i]-left);
				}else {
					// 積み立て消失+全部再積み立て
					left = B[i];
				}
			}
		}
		if(A[N]>left) {
			sum += left;
		}else {
			sum += A[N];
		}
		out.println(sum);
	}
} import java.io.PrintStream; PrintStream java.io import java.util.Scanner; Scanner java.util public class Main {
	public static void main(String[] args) {
		Scanner sc = null;
		PrintStream out = null;
		try {
			sc = new Scanner(System.in);
			out = System.out;
			exec(sc, out);
		} catch (Exception e) {
			e.printStackTrace();
			System.exit(1);
		} finally {
			if(out != null) {
				out.close();
			}
			if(sc != null) {
				sc.close();
			}
		}
		System.exit(0);
	}
	public static void exec(final Scanner sc, final PrintStream out) throws Exception{
		final int N = sc.nextInt();
		final long[] A = new long[N+1];
		final long[] B = new long[N];
		for(int i=0;i<N+1;i++) {
			A[i] = sc.nextLong();
		}
		for(int i=0;i<N;i++) {
			B[i] = sc.nextLong();
		}
		long left = 0;
		long sum = 0;
		for(int i=0;i<N;i++) {
			if(A[i]>B[i]+left) {
				// 全消費しても倒しきれない。
				sum+=(B[i]+left);
				left = 0;
			}else {
				// リソース余り(全部倒せる)
				sum+=A[i];
				if(A[i]>left) {
					// 積み立て全消費
					// 積み立てからのあまりを引き継ぐ。
					left = (B[i])-(A[i]-left);
				}else {
					// 積み立て消失+全部再積み立て
					left = B[i];
				}
			}
		}
		if(A[N]>left) {
			sum += left;
		}else {
			sum += A[N];
		}
		out.println(sum);
	}
} Main public static void main(String[] args) {
		Scanner sc = null;
		PrintStream out = null;
		try {
			sc = new Scanner(System.in);
			out = System.out;
			exec(sc, out);
		} catch (Exception e) {
			e.printStackTrace();
			System.exit(1);
		} finally {
			if(out != null) {
				out.close();
			}
			if(sc != null) {
				sc.close();
			}
		}
		System.exit(0);
	} main {
		Scanner sc = null;
		PrintStream out = null;
		try {
			sc = new Scanner(System.in);
			out = System.out;
			exec(sc, out);
		} catch (Exception e) {
			e.printStackTrace();
			System.exit(1);
		} finally {
			if(out != null) {
				out.close();
			}
			if(sc != null) {
				sc.close();
			}
		}
		System.exit(0);
	} Scanner sc = null; sc null PrintStream out = null; out null try {
			sc = new Scanner(System.in);
			out = System.out;
			exec(sc, out);
		} catch (Exception e) {
			e.printStackTrace();
			System.exit(1);
		} finally {
			if(out != null) {
				out.close();
			}
			if(sc != null) {
				sc.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
			System.exit(1);
		} Exception e {
			e.printStackTrace();
			System.exit(1);
		} e.printStackTrace() e.printStackTrace e System.exit(1) System.exit System 1 {
			if(out != null) {
				out.close();
			}
			if(sc != null) {
				sc.close();
			}
		} if(out != null) {
				out.close();
			} out != null out null {
				out.close();
			} out.close() out.close out if(sc != null) {
				sc.close();
			} sc != null sc null {
				sc.close();
			} sc.close() sc.close sc {
			sc = new Scanner(System.in);
			out = System.out;
			exec(sc, out);
		} sc = new Scanner(System.in) sc new Scanner(System.in) out = System.out out System.out System System.out exec(sc, out) exec sc out System.exit(0) System.exit System 0 String[] args args public static void exec(final Scanner sc, final PrintStream out) throws Exception{
		final int N = sc.nextInt();
		final long[] A = new long[N+1];
		final long[] B = new long[N];
		for(int i=0;i<N+1;i++) {
			A[i] = sc.nextLong();
		}
		for(int i=0;i<N;i++) {
			B[i] = sc.nextLong();
		}
		long left = 0;
		long sum = 0;
		for(int i=0;i<N;i++) {
			if(A[i]>B[i]+left) {
				// 全消費しても倒しきれない。
				sum+=(B[i]+left);
				left = 0;
			}else {
				// リソース余り(全部倒せる)
				sum+=A[i];
				if(A[i]>left) {
					// 積み立て全消費
					// 積み立てからのあまりを引き継ぐ。
					left = (B[i])-(A[i]-left);
				}else {
					// 積み立て消失+全部再積み立て
					left = B[i];
				}
			}
		}
		if(A[N]>left) {
			sum += left;
		}else {
			sum += A[N];
		}
		out.println(sum);
	} exec {
		final int N = sc.nextInt();
		final long[] A = new long[N+1];
		final long[] B = new long[N];
		for(int i=0;i<N+1;i++) {
			A[i] = sc.nextLong();
		}
		for(int i=0;i<N;i++) {
			B[i] = sc.nextLong();
		}
		long left = 0;
		long sum = 0;
		for(int i=0;i<N;i++) {
			if(A[i]>B[i]+left) {
				// 全消費しても倒しきれない。
				sum+=(B[i]+left);
				left = 0;
			}else {
				// リソース余り(全部倒せる)
				sum+=A[i];
				if(A[i]>left) {
					// 積み立て全消費
					// 積み立てからのあまりを引き継ぐ。
					left = (B[i])-(A[i]-left);
				}else {
					// 積み立て消失+全部再積み立て
					left = B[i];
				}
			}
		}
		if(A[N]>left) {
			sum += left;
		}else {
			sum += A[N];
		}
		out.println(sum);
	} final int N = sc.nextInt(); N sc.nextInt() sc.nextInt sc final long[] A = new long[N+1]; A new long[N+1] N+1 N 1 final long[] B = new long[N]; B new long[N] N for(int i=0;i<N+1;i++) {
			A[i] = sc.nextLong();
		} int i=0; int i=0; i 0 i<N+1 i N+1 N 1 i++ i++ i {
			A[i] = sc.nextLong();
		} {
			A[i] = sc.nextLong();
		} A[i] = sc.nextLong() A[i] A i sc.nextLong() sc.nextLong sc for(int i=0;i<N;i++) {
			B[i] = sc.nextLong();
		} int i=0; int i=0; i 0 i<N i N i++ i++ i {
			B[i] = sc.nextLong();
		} {
			B[i] = sc.nextLong();
		} B[i] = sc.nextLong() B[i] B i sc.nextLong() sc.nextLong sc long left = 0; left 0 long sum = 0; sum 0 for(int i=0;i<N;i++) {
			if(A[i]>B[i]+left) {
				// 全消費しても倒しきれない。
				sum+=(B[i]+left);
				left = 0;
			}else {
				// リソース余り(全部倒せる)
				sum+=A[i];
				if(A[i]>left) {
					// 積み立て全消費
					// 積み立てからのあまりを引き継ぐ。
					left = (B[i])-(A[i]-left);
				}else {
					// 積み立て消失+全部再積み立て
					left = B[i];
				}
			}
		} int i=0; int i=0; i 0 i<N i N i++ i++ i {
			if(A[i]>B[i]+left) {
				// 全消費しても倒しきれない。
				sum+=(B[i]+left);
				left = 0;
			}else {
				// リソース余り(全部倒せる)
				sum+=A[i];
				if(A[i]>left) {
					// 積み立て全消費
					// 積み立てからのあまりを引き継ぐ。
					left = (B[i])-(A[i]-left);
				}else {
					// 積み立て消失+全部再積み立て
					left = B[i];
				}
			}
		} {
			if(A[i]>B[i]+left) {
				// 全消費しても倒しきれない。
				sum+=(B[i]+left);
				left = 0;
			}else {
				// リソース余り(全部倒せる)
				sum+=A[i];
				if(A[i]>left) {
					// 積み立て全消費
					// 積み立てからのあまりを引き継ぐ。
					left = (B[i])-(A[i]-left);
				}else {
					// 積み立て消失+全部再積み立て
					left = B[i];
				}
			}
		} if(A[i]>B[i]+left) {
				// 全消費しても倒しきれない。
				sum+=(B[i]+left);
				left = 0;
			}else {
				// リソース余り(全部倒せる)
				sum+=A[i];
				if(A[i]>left) {
					// 積み立て全消費
					// 積み立てからのあまりを引き継ぐ。
					left = (B[i])-(A[i]-left);
				}else {
					// 積み立て消失+全部再積み立て
					left = B[i];
				}
			} A[i]>B[i]+left A[i] A i B[i]+left B[i] B i left {
				// 全消費しても倒しきれない。
				sum+=(B[i]+left);
				left = 0;
			} sum+=(B[i]+left) sum (B[i]+left) B[i] B i left left = 0 left 0 {
				// リソース余り(全部倒せる)
				sum+=A[i];
				if(A[i]>left) {
					// 積み立て全消費
					// 積み立てからのあまりを引き継ぐ。
					left = (B[i])-(A[i]-left);
				}else {
					// 積み立て消失+全部再積み立て
					left = B[i];
				}
			} sum+=A[i] sum A[i] A i if(A[i]>left) {
					// 積み立て全消費
					// 積み立てからのあまりを引き継ぐ。
					left = (B[i])-(A[i]-left);
				}else {
					// 積み立て消失+全部再積み立て
					left = B[i];
				} A[i]>left A[i] A i left {
					// 積み立て全消費
					// 積み立てからのあまりを引き継ぐ。
					left = (B[i])-(A[i]-left);
				} left = (B[i])-(A[i]-left) left (B[i])-(A[i]-left) (B[i]) B i (A[i]-left) A[i] A i left {
					// 積み立て消失+全部再積み立て
					left = B[i];
				} left = B[i] left B[i] B i if(A[N]>left) {
			sum += left;
		}else {
			sum += A[N];
		} A[N]>left A[N] A N left {
			sum += left;
		} sum += left sum left {
			sum += A[N];
		} sum += A[N] sum A[N] A N out.println(sum) out.println out sum final Scanner sc sc final PrintStream out out public class Main {
	public static void main(String[] args) {
		Scanner sc = null;
		PrintStream out = null;
		try {
			sc = new Scanner(System.in);
			out = System.out;
			exec(sc, out);
		} catch (Exception e) {
			e.printStackTrace();
			System.exit(1);
		} finally {
			if(out != null) {
				out.close();
			}
			if(sc != null) {
				sc.close();
			}
		}
		System.exit(0);
	}
	public static void exec(final Scanner sc, final PrintStream out) throws Exception{
		final int N = sc.nextInt();
		final long[] A = new long[N+1];
		final long[] B = new long[N];
		for(int i=0;i<N+1;i++) {
			A[i] = sc.nextLong();
		}
		for(int i=0;i<N;i++) {
			B[i] = sc.nextLong();
		}
		long left = 0;
		long sum = 0;
		for(int i=0;i<N;i++) {
			if(A[i]>B[i]+left) {
				// 全消費しても倒しきれない。
				sum+=(B[i]+left);
				left = 0;
			}else {
				// リソース余り(全部倒せる)
				sum+=A[i];
				if(A[i]>left) {
					// 積み立て全消費
					// 積み立てからのあまりを引き継ぐ。
					left = (B[i])-(A[i]-left);
				}else {
					// 積み立て消失+全部再積み立て
					left = B[i];
				}
			}
		}
		if(A[N]>left) {
			sum += left;
		}else {
			sum += A[N];
		}
		out.println(sum);
	}
} public class Main {
	public static void main(String[] args) {
		Scanner sc = null;
		PrintStream out = null;
		try {
			sc = new Scanner(System.in);
			out = System.out;
			exec(sc, out);
		} catch (Exception e) {
			e.printStackTrace();
			System.exit(1);
		} finally {
			if(out != null) {
				out.close();
			}
			if(sc != null) {
				sc.close();
			}
		}
		System.exit(0);
	}
	public static void exec(final Scanner sc, final PrintStream out) throws Exception{
		final int N = sc.nextInt();
		final long[] A = new long[N+1];
		final long[] B = new long[N];
		for(int i=0;i<N+1;i++) {
			A[i] = sc.nextLong();
		}
		for(int i=0;i<N;i++) {
			B[i] = sc.nextLong();
		}
		long left = 0;
		long sum = 0;
		for(int i=0;i<N;i++) {
			if(A[i]>B[i]+left) {
				// 全消費しても倒しきれない。
				sum+=(B[i]+left);
				left = 0;
			}else {
				// リソース余り(全部倒せる)
				sum+=A[i];
				if(A[i]>left) {
					// 積み立て全消費
					// 積み立てからのあまりを引き継ぐ。
					left = (B[i])-(A[i]-left);
				}else {
					// 積み立て消失+全部再積み立て
					left = B[i];
				}
			}
		}
		if(A[N]>left) {
			sum += left;
		}else {
			sum += A[N];
		}
		out.println(sum);
	}
} Main
import java.io.PrintStream;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = null;
		PrintStream out = null;
		try {
			sc = new Scanner(System.in);
			out = System.out;
			exec(sc, out);
		} catch (Exception e) {
			e.printStackTrace();
			System.exit(1);
		} finally {
			if(out != null) {
				out.close();
			}
			if(sc != null) {
				sc.close();
			}
		}
		System.exit(0);
	}
	public static void exec(final Scanner sc, final PrintStream out) throws Exception{
		final int N = sc.nextInt();
		final long[] A = new long[N+1];
		final long[] B = new long[N];
		for(int i=0;i<N+1;i++) {
			A[i] = sc.nextLong();
		}
		for(int i=0;i<N;i++) {
			B[i] = sc.nextLong();
		}
		long left = 0;
		long sum = 0;
		for(int i=0;i<N;i++) {
			if(A[i]>B[i]+left) {
				// 全消費しても倒しきれない。
				sum+=(B[i]+left);
				left = 0;
			}else {
				// リソース余り(全部倒せる)
				sum+=A[i];
				if(A[i]>left) {
					// 積み立て全消費
					// 積み立てからのあまりを引き継ぐ。
					left = (B[i])-(A[i]-left);
				}else {
					// 積み立て消失+全部再積み立て
					left = B[i];
				}
			}
		}
		if(A[N]>left) {
			sum += left;
		}else {
			sum += A[N];
		}
		out.println(sum);
	}
}
