object Main extends App {
	val pw = new java.io.PrintWriter(System.out)

	val M = 1000000000L

	def safeHead(l: Seq[Long]) = l.headOption.getOrElse(M)
	def safeTail(l: Seq[Long]) = if (l.isEmpty) l else l.tail

	@scala.annotation.tailrec
	def f(k: Long, a: Seq[Long], b: Seq[Long], count: Int = 0): Int =
		if (k < 0) count - 1
		else {
			val ahd = safeHead(a)
			val bhd = safeHead(b)
		  f(k - Math.min(ahd, bhd), if (ahd < bhd) safeTail(a) else a, if (ahd < bhd) b else safeTail(b), count + 1)
		}

	val n, m = Scanner.nextInt
	pw.println(f(Scanner.nextLong, Seq.fill(n)(Scanner.nextLong), Seq.fill(m)(Scanner.nextLong)))
	pw.flush()
}

object Scanner {
	private val buf = new Array[Byte](1024); private var ptr = 0; private var len = 0

	@inline private def isPrintableChar(c: Int): Boolean = 33 <= c && c <= 126
	@inline private def hasNextByte(): Boolean = if (ptr >= len) { ptr = 0; len = System.in.read(buf); len > 0 } else true
	@inline private def hasNext(): Boolean = {
		while (hasNextByte() && !isPrintableChar(buf(ptr))) ptr += 1
		hasNextByte()
	}
	@inline private def readByte(): Byte = if (hasNextByte()) { val res = buf(ptr); ptr += 1; res } else -1

	def next(): String = {
		if(!hasNext()) ???
		val sb = new StringBuilder; var b = readByte()
		while (isPrintableChar(b)) { sb.append(b.toChar); b = readByte() }
		sb.toString
	}

	def nextInt(): Int = {
		val n = nextLong()
		if (n < Int.MinValue || Int.MaxValue < n) ???
		n.toInt
	}

	def nextLong(): Long = {
		if(!hasNext()) ???
		var minus = false; var b = readByte()
		if (b == '-') { minus = true; b = readByte() }

		@scala.annotation.tailrec
		def go (b: Byte, n: Long = 0): Long = if ('0' <= b && b <= '9') go(readByte(), n * 10 + b - '0') else if (minus) -n else n

		go(b)
	}

	def nextDouble(): Double = next().toDouble
}
