
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) {
		FastReader sc = new FastReader();
		int n = sc.nextInt();
		long res = 0;
		long[] streets = new long[n+1];
		long[] heroes = new long[n];
		
		for (int i = 0; i < (n + 1); i++) {
			long monster = sc.nextInt();
			streets[i] = monster;
		}
		
		for (int i = 0; i < n; i++) {
			long damage = sc.nextInt();
			heroes[i] = damage;
		}
		
		long left = 0;
		
		for (int i = 0; i < n; i++) {
			long damage = heroes[i];
			long monster = streets[i];
			if (monster > 0) {
				res += left;
				monster -= left;
			}
			
			if (damage >= monster) {
				res += monster;
				left = Math.min(damage-monster, streets[i+1]);
			} else {
				res += Math.min(damage, monster);;
				left = 0;
			}
		}
		
		if (left > 0 && streets[streets.length - 1] > 0) {
			res += left;
		}
		
		System.out.println(res);
	}
	
	static class FastReader { 
        BufferedReader br; 
        StringTokenizer st; 
  
        public FastReader() { 
            br = new BufferedReader(new InputStreamReader(System.in)); 
        } 
  
        String next() { 
            while (st == null || !st.hasMoreElements()) { 
                try { 
                    st = new StringTokenizer(br.readLine()); 
                } catch (IOException  e) { 
                    e.printStackTrace(); 
                } 
            } 
            return st.nextToken(); 
        } 
  
        int nextInt() { 
            return Integer.parseInt(next()); 
        } 
  
        long nextLong() { 
            return Long.parseLong(next()); 
        } 
  
        double nextDouble() { 
            return Double.parseDouble(next()); 
        } 
  
        String nextLine() { 
            String str = ""; 
            try{ 
                str = br.readLine(); 
            } catch (IOException e) { 
                e.printStackTrace(); 
            } 
            return str; 
        } 
    } 
} import java.io.BufferedReader; BufferedReader java.io import java.io.IOException; IOException java.io import java.io.InputStreamReader; InputStreamReader java.io import java.util.Arrays; Arrays java.util import java.util.HashMap; HashMap java.util import java.util.HashSet; HashSet java.util import java.util.Map; Map java.util import java.util.Set; Set java.util import java.util.StringTokenizer; StringTokenizer java.util public class Main {

	public static void main(String[] args) {
		FastReader sc = new FastReader();
		int n = sc.nextInt();
		long res = 0;
		long[] streets = new long[n+1];
		long[] heroes = new long[n];
		
		for (int i = 0; i < (n + 1); i++) {
			long monster = sc.nextInt();
			streets[i] = monster;
		}
		
		for (int i = 0; i < n; i++) {
			long damage = sc.nextInt();
			heroes[i] = damage;
		}
		
		long left = 0;
		
		for (int i = 0; i < n; i++) {
			long damage = heroes[i];
			long monster = streets[i];
			if (monster > 0) {
				res += left;
				monster -= left;
			}
			
			if (damage >= monster) {
				res += monster;
				left = Math.min(damage-monster, streets[i+1]);
			} else {
				res += Math.min(damage, monster);;
				left = 0;
			}
		}
		
		if (left > 0 && streets[streets.length - 1] > 0) {
			res += left;
		}
		
		System.out.println(res);
	}
	
	static class FastReader { 
        BufferedReader br; 
        StringTokenizer st; 
  
        public FastReader() { 
            br = new BufferedReader(new InputStreamReader(System.in)); 
        } 
  
        String next() { 
            while (st == null || !st.hasMoreElements()) { 
                try { 
                    st = new StringTokenizer(br.readLine()); 
                } catch (IOException  e) { 
                    e.printStackTrace(); 
                } 
            } 
            return st.nextToken(); 
        } 
  
        int nextInt() { 
            return Integer.parseInt(next()); 
        } 
  
        long nextLong() { 
            return Long.parseLong(next()); 
        } 
  
        double nextDouble() { 
            return Double.parseDouble(next()); 
        } 
  
        String nextLine() { 
            String str = ""; 
            try{ 
                str = br.readLine(); 
            } catch (IOException e) { 
                e.printStackTrace(); 
            } 
            return str; 
        } 
    } 
} Main public static void main(String[] args) {
		FastReader sc = new FastReader();
		int n = sc.nextInt();
		long res = 0;
		long[] streets = new long[n+1];
		long[] heroes = new long[n];
		
		for (int i = 0; i < (n + 1); i++) {
			long monster = sc.nextInt();
			streets[i] = monster;
		}
		
		for (int i = 0; i < n; i++) {
			long damage = sc.nextInt();
			heroes[i] = damage;
		}
		
		long left = 0;
		
		for (int i = 0; i < n; i++) {
			long damage = heroes[i];
			long monster = streets[i];
			if (monster > 0) {
				res += left;
				monster -= left;
			}
			
			if (damage >= monster) {
				res += monster;
				left = Math.min(damage-monster, streets[i+1]);
			} else {
				res += Math.min(damage, monster);;
				left = 0;
			}
		}
		
		if (left > 0 && streets[streets.length - 1] > 0) {
			res += left;
		}
		
		System.out.println(res);
	} main {
		FastReader sc = new FastReader();
		int n = sc.nextInt();
		long res = 0;
		long[] streets = new long[n+1];
		long[] heroes = new long[n];
		
		for (int i = 0; i < (n + 1); i++) {
			long monster = sc.nextInt();
			streets[i] = monster;
		}
		
		for (int i = 0; i < n; i++) {
			long damage = sc.nextInt();
			heroes[i] = damage;
		}
		
		long left = 0;
		
		for (int i = 0; i < n; i++) {
			long damage = heroes[i];
			long monster = streets[i];
			if (monster > 0) {
				res += left;
				monster -= left;
			}
			
			if (damage >= monster) {
				res += monster;
				left = Math.min(damage-monster, streets[i+1]);
			} else {
				res += Math.min(damage, monster);;
				left = 0;
			}
		}
		
		if (left > 0 && streets[streets.length - 1] > 0) {
			res += left;
		}
		
		System.out.println(res);
	} FastReader sc = new FastReader(); sc new FastReader() int n = sc.nextInt(); n sc.nextInt() sc.nextInt sc long res = 0; res 0 long[] streets = new long[n+1]; streets new long[n+1] n+1 n 1 long[] heroes = new long[n]; heroes new long[n] n for (int i = 0; i < (n + 1); i++) {
			long monster = sc.nextInt();
			streets[i] = monster;
		} int i = 0; int i = 0; i 0 i < (n + 1) i (n + 1) n 1 i++ i++ i {
			long monster = sc.nextInt();
			streets[i] = monster;
		} {
			long monster = sc.nextInt();
			streets[i] = monster;
		} long monster = sc.nextInt(); monster sc.nextInt() sc.nextInt sc streets[i] = monster streets[i] streets i monster for (int i = 0; i < n; i++) {
			long damage = sc.nextInt();
			heroes[i] = damage;
		} int i = 0; int i = 0; i 0 i < n i n i++ i++ i {
			long damage = sc.nextInt();
			heroes[i] = damage;
		} {
			long damage = sc.nextInt();
			heroes[i] = damage;
		} long damage = sc.nextInt(); damage sc.nextInt() sc.nextInt sc heroes[i] = damage heroes[i] heroes i damage long left = 0; left 0 for (int i = 0; i < n; i++) {
			long damage = heroes[i];
			long monster = streets[i];
			if (monster > 0) {
				res += left;
				monster -= left;
			}
			
			if (damage >= monster) {
				res += monster;
				left = Math.min(damage-monster, streets[i+1]);
			} else {
				res += Math.min(damage, monster);;
				left = 0;
			}
		} int i = 0; int i = 0; i 0 i < n i n i++ i++ i {
			long damage = heroes[i];
			long monster = streets[i];
			if (monster > 0) {
				res += left;
				monster -= left;
			}
			
			if (damage >= monster) {
				res += monster;
				left = Math.min(damage-monster, streets[i+1]);
			} else {
				res += Math.min(damage, monster);;
				left = 0;
			}
		} {
			long damage = heroes[i];
			long monster = streets[i];
			if (monster > 0) {
				res += left;
				monster -= left;
			}
			
			if (damage >= monster) {
				res += monster;
				left = Math.min(damage-monster, streets[i+1]);
			} else {
				res += Math.min(damage, monster);;
				left = 0;
			}
		} long damage = heroes[i]; damage heroes[i] heroes i long monster = streets[i]; monster streets[i] streets i if (monster > 0) {
				res += left;
				monster -= left;
			} monster > 0 monster 0 {
				res += left;
				monster -= left;
			} res += left res left monster -= left monster left if (damage >= monster) {
				res += monster;
				left = Math.min(damage-monster, streets[i+1]);
			} else {
				res += Math.min(damage, monster);;
				left = 0;
			} damage >= monster damage monster {
				res += monster;
				left = Math.min(damage-monster, streets[i+1]);
			} res += monster res monster left = Math.min(damage-monster, streets[i+1]) left Math.min(damage-monster, streets[i+1]) Math.min Math damage-monster damage monster streets[i+1] streets i+1 i 1 {
				res += Math.min(damage, monster);;
				left = 0;
			} res += Math.min(damage, monster) res Math.min(damage, monster) Math.min Math damage monster left = 0 left 0 if (left > 0 && streets[streets.length - 1] > 0) {
			res += left;
		} left > 0 && streets[streets.length - 1] > 0 left > 0 left 0 streets[streets.length - 1] > 0 streets[streets.length - 1] streets streets.length - 1 streets.length streets streets.length 1 0 {
			res += left;
		} res += left res left System.out.println(res) System.out.println System.out System System.out res String[] args args static class FastReader { 
        BufferedReader br; 
        StringTokenizer st; 
  
        public FastReader() { 
            br = new BufferedReader(new InputStreamReader(System.in)); 
        } 
  
        String next() { 
            while (st == null || !st.hasMoreElements()) { 
                try { 
                    st = new StringTokenizer(br.readLine()); 
                } catch (IOException  e) { 
                    e.printStackTrace(); 
                } 
            } 
            return st.nextToken(); 
        } 
  
        int nextInt() { 
            return Integer.parseInt(next()); 
        } 
  
        long nextLong() { 
            return Long.parseLong(next()); 
        } 
  
        double nextDouble() { 
            return Double.parseDouble(next()); 
        } 
  
        String nextLine() { 
            String str = ""; 
            try{ 
                str = br.readLine(); 
            } catch (IOException e) { 
                e.printStackTrace(); 
            } 
            return str; 
        } 
    } FastReader BufferedReader br; br StringTokenizer st; st public FastReader() { 
            br = new BufferedReader(new InputStreamReader(System.in)); 
        } FastReader { 
            br = new BufferedReader(new InputStreamReader(System.in)); 
        } br = new BufferedReader(new InputStreamReader(System.in)) br new BufferedReader(new InputStreamReader(System.in)) String next() { 
            while (st == null || !st.hasMoreElements()) { 
                try { 
                    st = new StringTokenizer(br.readLine()); 
                } catch (IOException  e) { 
                    e.printStackTrace(); 
                } 
            } 
            return st.nextToken(); 
        } next { 
            while (st == null || !st.hasMoreElements()) { 
                try { 
                    st = new StringTokenizer(br.readLine()); 
                } catch (IOException  e) { 
                    e.printStackTrace(); 
                } 
            } 
            return st.nextToken(); 
        } while (st == null || !st.hasMoreElements()) { 
                try { 
                    st = new StringTokenizer(br.readLine()); 
                } catch (IOException  e) { 
                    e.printStackTrace(); 
                } 
            } st == null || !st.hasMoreElements() st == null st null !st.hasMoreElements() st.hasMoreElements() st.hasMoreElements st { 
                try { 
                    st = new StringTokenizer(br.readLine()); 
                } catch (IOException  e) { 
                    e.printStackTrace(); 
                } 
            } try { 
                    st = new StringTokenizer(br.readLine()); 
                } catch (IOException  e) { 
                    e.printStackTrace(); 
                } catch (IOException  e) { 
                    e.printStackTrace(); 
                } IOException  e { 
                    e.printStackTrace(); 
                } e.printStackTrace() e.printStackTrace e { 
                    st = new StringTokenizer(br.readLine()); 
                } st = new StringTokenizer(br.readLine()) st new StringTokenizer(br.readLine()) return st.nextToken(); st.nextToken() st.nextToken st int nextInt() { 
            return Integer.parseInt(next()); 
        } nextInt { 
            return Integer.parseInt(next()); 
        } return Integer.parseInt(next()); Integer.parseInt(next()) Integer.parseInt Integer next() next long nextLong() { 
            return Long.parseLong(next()); 
        } nextLong { 
            return Long.parseLong(next()); 
        } return Long.parseLong(next()); Long.parseLong(next()) Long.parseLong Long next() next double nextDouble() { 
            return Double.parseDouble(next()); 
        } nextDouble { 
            return Double.parseDouble(next()); 
        } return Double.parseDouble(next()); Double.parseDouble(next()) Double.parseDouble Double next() next String nextLine() { 
            String str = ""; 
            try{ 
                str = br.readLine(); 
            } catch (IOException e) { 
                e.printStackTrace(); 
            } 
            return str; 
        } nextLine { 
            String str = ""; 
            try{ 
                str = br.readLine(); 
            } catch (IOException e) { 
                e.printStackTrace(); 
            } 
            return str; 
        } String str = ""; str "" try{ 
                str = br.readLine(); 
            } catch (IOException e) { 
                e.printStackTrace(); 
            } catch (IOException e) { 
                e.printStackTrace(); 
            } IOException e { 
                e.printStackTrace(); 
            } e.printStackTrace() e.printStackTrace e { 
                str = br.readLine(); 
            } str = br.readLine() str br.readLine() br.readLine br return str; str public class Main {

	public static void main(String[] args) {
		FastReader sc = new FastReader();
		int n = sc.nextInt();
		long res = 0;
		long[] streets = new long[n+1];
		long[] heroes = new long[n];
		
		for (int i = 0; i < (n + 1); i++) {
			long monster = sc.nextInt();
			streets[i] = monster;
		}
		
		for (int i = 0; i < n; i++) {
			long damage = sc.nextInt();
			heroes[i] = damage;
		}
		
		long left = 0;
		
		for (int i = 0; i < n; i++) {
			long damage = heroes[i];
			long monster = streets[i];
			if (monster > 0) {
				res += left;
				monster -= left;
			}
			
			if (damage >= monster) {
				res += monster;
				left = Math.min(damage-monster, streets[i+1]);
			} else {
				res += Math.min(damage, monster);;
				left = 0;
			}
		}
		
		if (left > 0 && streets[streets.length - 1] > 0) {
			res += left;
		}
		
		System.out.println(res);
	}
	
	static class FastReader { 
        BufferedReader br; 
        StringTokenizer st; 
  
        public FastReader() { 
            br = new BufferedReader(new InputStreamReader(System.in)); 
        } 
  
        String next() { 
            while (st == null || !st.hasMoreElements()) { 
                try { 
                    st = new StringTokenizer(br.readLine()); 
                } catch (IOException  e) { 
                    e.printStackTrace(); 
                } 
            } 
            return st.nextToken(); 
        } 
  
        int nextInt() { 
            return Integer.parseInt(next()); 
        } 
  
        long nextLong() { 
            return Long.parseLong(next()); 
        } 
  
        double nextDouble() { 
            return Double.parseDouble(next()); 
        } 
  
        String nextLine() { 
            String str = ""; 
            try{ 
                str = br.readLine(); 
            } catch (IOException e) { 
                e.printStackTrace(); 
            } 
            return str; 
        } 
    } 
} public class Main {

	public static void main(String[] args) {
		FastReader sc = new FastReader();
		int n = sc.nextInt();
		long res = 0;
		long[] streets = new long[n+1];
		long[] heroes = new long[n];
		
		for (int i = 0; i < (n + 1); i++) {
			long monster = sc.nextInt();
			streets[i] = monster;
		}
		
		for (int i = 0; i < n; i++) {
			long damage = sc.nextInt();
			heroes[i] = damage;
		}
		
		long left = 0;
		
		for (int i = 0; i < n; i++) {
			long damage = heroes[i];
			long monster = streets[i];
			if (monster > 0) {
				res += left;
				monster -= left;
			}
			
			if (damage >= monster) {
				res += monster;
				left = Math.min(damage-monster, streets[i+1]);
			} else {
				res += Math.min(damage, monster);;
				left = 0;
			}
		}
		
		if (left > 0 && streets[streets.length - 1] > 0) {
			res += left;
		}
		
		System.out.println(res);
	}
	
	static class FastReader { 
        BufferedReader br; 
        StringTokenizer st; 
  
        public FastReader() { 
            br = new BufferedReader(new InputStreamReader(System.in)); 
        } 
  
        String next() { 
            while (st == null || !st.hasMoreElements()) { 
                try { 
                    st = new StringTokenizer(br.readLine()); 
                } catch (IOException  e) { 
                    e.printStackTrace(); 
                } 
            } 
            return st.nextToken(); 
        } 
  
        int nextInt() { 
            return Integer.parseInt(next()); 
        } 
  
        long nextLong() { 
            return Long.parseLong(next()); 
        } 
  
        double nextDouble() { 
            return Double.parseDouble(next()); 
        } 
  
        String nextLine() { 
            String str = ""; 
            try{ 
                str = br.readLine(); 
            } catch (IOException e) { 
                e.printStackTrace(); 
            } 
            return str; 
        } 
    } 
} Main

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) {
		FastReader sc = new FastReader();
		int n = sc.nextInt();
		long res = 0;
		long[] streets = new long[n+1];
		long[] heroes = new long[n];
		
		for (int i = 0; i < (n + 1); i++) {
			long monster = sc.nextInt();
			streets[i] = monster;
		}
		
		for (int i = 0; i < n; i++) {
			long damage = sc.nextInt();
			heroes[i] = damage;
		}
		
		long left = 0;
		
		for (int i = 0; i < n; i++) {
			long damage = heroes[i];
			long monster = streets[i];
			if (monster > 0) {
				res += left;
				monster -= left;
			}
			
			if (damage >= monster) {
				res += monster;
				left = Math.min(damage-monster, streets[i+1]);
			} else {
				res += Math.min(damage, monster);;
				left = 0;
			}
		}
		
		if (left > 0 && streets[streets.length - 1] > 0) {
			res += left;
		}
		
		System.out.println(res);
	}
	
	static class FastReader { 
        BufferedReader br; 
        StringTokenizer st; 
  
        public FastReader() { 
            br = new BufferedReader(new InputStreamReader(System.in)); 
        } 
  
        String next() { 
            while (st == null || !st.hasMoreElements()) { 
                try { 
                    st = new StringTokenizer(br.readLine()); 
                } catch (IOException  e) { 
                    e.printStackTrace(); 
                } 
            } 
            return st.nextToken(); 
        } 
  
        int nextInt() { 
            return Integer.parseInt(next()); 
        } 
  
        long nextLong() { 
            return Long.parseLong(next()); 
        } 
  
        double nextDouble() { 
            return Double.parseDouble(next()); 
        } 
  
        String nextLine() { 
            String str = ""; 
            try{ 
                str = br.readLine(); 
            } catch (IOException e) { 
                e.printStackTrace(); 
            } 
            return str; 
        } 
    } 
}
