package main

import (
	"bufio"
	"container/list"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func main() {
	// 读取两行
	scanner := bufio.NewScanner(os.Stdin)

	var C []int
    var G list.List

	// 读第一行:补给舰能量
	if !scanner.Scan() {
		fmt.Println(-1)
		return
	}
	line1 := strings.TrimSpace(scanner.Text())
	if line1 == "" {
		fmt.Println(-1)
		return
	}
	parts1 := strings.Fields(line1)
	for _, s := range parts1 {
		x, err := strconv.Atoi(s)
		if err != nil || x < 1 || x > 100 {
			fmt.Println(-1)
			return
		}
		C = append(C, x)
	}

	// 读第二行:作战舰需求
	if !scanner.Scan() {
		fmt.Println(-1)
		return
	}
	line2 := strings.TrimSpace(scanner.Text())
	if line2 == "" {
		fmt.Println(-1)
		return
	}
	parts2 := strings.Fields(line2)
	for _, s := range parts2 {
		x, err := strconv.Atoi(s)
		if err != nil || x < 1 || x > 100 {
			fmt.Println(-1)
			return
		}
		G.PushBack(x)
	}
    var C_lenght, G_lenght = len(C), G.Len()
    var success int = 0
    var test int = 0 // 单个补给舰在“需求不足”时的尝试次数,不能大于此时的战舰总数
    for i:=0; i < C_lenght ;i++{
        if G.Len() > 0 {
            if G.Front().Value.(int) == C[i] { // “精准补给”
                G.Remove(G.Front())
                success++
                test =0
            } else if G.Front().Value.(int) < C[i] { // “超额补给”
                max := G.Front().Value.(int)
                G.Remove(G.Front())
                success++
                for G.Len() > 0 && max +G.Front().Value.(int) <= C[i] {
                    max += G.Front().Value.(int)
                    G.Remove(G.Front())
                    success++
                }
                test =0
            }else {
                if test < G.Len() { // 已重试次数不大于当前战舰数量
                    G.PushBack(G.Front().Value.(int))
                    G.Remove(G.Front())
                    i-- // 重试
                    test++ // 重试次数+1
                } else {
                    test = 0 // 当前补给舰无法进行有效的分配,跳过当前补给舰
                }
            }
        }else {
            break // 战舰都补给完
        }
    }
    fmt.Println(G_lenght - success)
}