import java.util.Scanner;

public class Main {

	public static String Y = "Yes";
	public static String N = "No";
	public static long MOD = (long) (Math.pow(10, 9) + 7);
	public static Scanner sc = new Scanner(System.in);

	public static void main(String[] args) {
		char[] a = nc();
		char[] b = nc();
		char[] c = nc();

		int ac = a.length;
		int bc = b.length;
		int cc = c.length;

		int an = 0;
		int bn = 0;
		int cn = 0;

		char now = 'a';

		for (;;) {

			if (now == 'a') {
				if (an == ac) {
					out("A");
					return;
				}
				now = a[an];
				an++;
			}
			if (now == 'b') {

				if (bn == bc) {
					out("B");
					return;
				}
				now = b[bn];
				bn++;
			}
			if (now == 'c') {

				if (cn == cc) {
					out("C");
					return;
				}
				now = c[cn];
				cn++;
			}

		}
	}

	/*
	 * 以下メソッド集
	 */
	static int ni() {
		return sc.nextInt();
	}

	static long nl() {
		return sc.nextLong();
	}

	static double nd() {
		return sc.nextDouble();
	}

	static String n() {
		return sc.next();
	}

	static char[] nc() {
		return sc.next().toCharArray();
	}

	static int kaijo(int n) {
		if (n == 0 || n == 1) {
			return 1;
		} else {
			return n * kaijo(n - 1);
		}
	}

	static int fib(int n) {
		return (n == 1 || n == 0) ? n : fib(n - 2) + fib(n - 1);
	}

	static long lcm(long m, long n) {

		return m * n / gcd(m, n);
	}

	static int lcm(int m, int n) {

		return m * n / gcd(m, n);
	}

	static long gcd(long a, long b) {
		return (b == 0) ? a : gcd(b, a % b);
	}

	static int gcd(int a, int b) {
		return (b == 0) ? a : gcd(b, a % b);
	}

	static void out(String info) {
		System.out.println(info);
	}

	static void out(int info) {
		System.out.println(info);
	}

	static void out(double info) {
		System.out.println(info);
	}

	static void out(long info) {
		System.out.println(info);
	}

	static void out(char info) {
		System.out.println(info);
	}

	static void out(Object obj) {
		System.out.println(obj.toString());
	}

	static void outn(String info) {
		System.out.print(info);
	}

	static void outn(int info) {
		System.out.print(info);
	}

	static void outn(double info) {
		System.out.print(info);
	}

	static void outn(long info) {
		System.out.print(info);
	}

	static void outn(char info) {
		System.out.print(info);
	}

	static double max(double d, double e) {
		return Math.max(d, e);
	}

	static long max(long a, long b) {
		return Math.max(a, b);
	}

	static double min(double d, double e) {
		return Math.min(d, e);
	}

	static long min(long a, long b) {
		return Math.min(a, b);
	}
}

class XY {
	int h;
	int c;

	XY(int h, int c) {
		this.h = h;
		this.c = c;
	}
} import java.util.Scanner; Scanner java.util public class Main {

	public static String Y = "Yes";
	public static String N = "No";
	public static long MOD = (long) (Math.pow(10, 9) + 7);
	public static Scanner sc = new Scanner(System.in);

	public static void main(String[] args) {
		char[] a = nc();
		char[] b = nc();
		char[] c = nc();

		int ac = a.length;
		int bc = b.length;
		int cc = c.length;

		int an = 0;
		int bn = 0;
		int cn = 0;

		char now = 'a';

		for (;;) {

			if (now == 'a') {
				if (an == ac) {
					out("A");
					return;
				}
				now = a[an];
				an++;
			}
			if (now == 'b') {

				if (bn == bc) {
					out("B");
					return;
				}
				now = b[bn];
				bn++;
			}
			if (now == 'c') {

				if (cn == cc) {
					out("C");
					return;
				}
				now = c[cn];
				cn++;
			}

		}
	}

	/*
	 * 以下メソッド集
	 */
	static int ni() {
		return sc.nextInt();
	}

	static long nl() {
		return sc.nextLong();
	}

	static double nd() {
		return sc.nextDouble();
	}

	static String n() {
		return sc.next();
	}

	static char[] nc() {
		return sc.next().toCharArray();
	}

	static int kaijo(int n) {
		if (n == 0 || n == 1) {
			return 1;
		} else {
			return n * kaijo(n - 1);
		}
	}

	static int fib(int n) {
		return (n == 1 || n == 0) ? n : fib(n - 2) + fib(n - 1);
	}

	static long lcm(long m, long n) {

		return m * n / gcd(m, n);
	}

	static int lcm(int m, int n) {

		return m * n / gcd(m, n);
	}

	static long gcd(long a, long b) {
		return (b == 0) ? a : gcd(b, a % b);
	}

	static int gcd(int a, int b) {
		return (b == 0) ? a : gcd(b, a % b);
	}

	static void out(String info) {
		System.out.println(info);
	}

	static void out(int info) {
		System.out.println(info);
	}

	static void out(double info) {
		System.out.println(info);
	}

	static void out(long info) {
		System.out.println(info);
	}

	static void out(char info) {
		System.out.println(info);
	}

	static void out(Object obj) {
		System.out.println(obj.toString());
	}

	static void outn(String info) {
		System.out.print(info);
	}

	static void outn(int info) {
		System.out.print(info);
	}

	static void outn(double info) {
		System.out.print(info);
	}

	static void outn(long info) {
		System.out.print(info);
	}

	static void outn(char info) {
		System.out.print(info);
	}

	static double max(double d, double e) {
		return Math.max(d, e);
	}

	static long max(long a, long b) {
		return Math.max(a, b);
	}

	static double min(double d, double e) {
		return Math.min(d, e);
	}

	static long min(long a, long b) {
		return Math.min(a, b);
	}
} Main public static String Y = "Yes"; Y "Yes" public static String N = "No"; N "No" public static long MOD = (long) (Math.pow(10, 9) + 7); MOD (long) (Math.pow(10, 9) + 7) Math.pow(10, 9) Math.pow Math 10 9 7 public static Scanner sc = new Scanner(System.in); sc new Scanner(System.in) public static void main(String[] args) {
		char[] a = nc();
		char[] b = nc();
		char[] c = nc();

		int ac = a.length;
		int bc = b.length;
		int cc = c.length;

		int an = 0;
		int bn = 0;
		int cn = 0;

		char now = 'a';

		for (;;) {

			if (now == 'a') {
				if (an == ac) {
					out("A");
					return;
				}
				now = a[an];
				an++;
			}
			if (now == 'b') {

				if (bn == bc) {
					out("B");
					return;
				}
				now = b[bn];
				bn++;
			}
			if (now == 'c') {

				if (cn == cc) {
					out("C");
					return;
				}
				now = c[cn];
				cn++;
			}

		}
	} main {
		char[] a = nc();
		char[] b = nc();
		char[] c = nc();

		int ac = a.length;
		int bc = b.length;
		int cc = c.length;

		int an = 0;
		int bn = 0;
		int cn = 0;

		char now = 'a';

		for (;;) {

			if (now == 'a') {
				if (an == ac) {
					out("A");
					return;
				}
				now = a[an];
				an++;
			}
			if (now == 'b') {

				if (bn == bc) {
					out("B");
					return;
				}
				now = b[bn];
				bn++;
			}
			if (now == 'c') {

				if (cn == cc) {
					out("C");
					return;
				}
				now = c[cn];
				cn++;
			}

		}
	} char[] a = nc(); a nc() nc char[] b = nc(); b nc() nc char[] c = nc(); c nc() nc int ac = a.length; ac a.length a a.length int bc = b.length; bc b.length b b.length int cc = c.length; cc c.length c c.length int an = 0; an 0 int bn = 0; bn 0 int cn = 0; cn 0 char now = 'a'; now 'a' for (;;) {

			if (now == 'a') {
				if (an == ac) {
					out("A");
					return;
				}
				now = a[an];
				an++;
			}
			if (now == 'b') {

				if (bn == bc) {
					out("B");
					return;
				}
				now = b[bn];
				bn++;
			}
			if (now == 'c') {

				if (cn == cc) {
					out("C");
					return;
				}
				now = c[cn];
				cn++;
			}

		} ; {

			if (now == 'a') {
				if (an == ac) {
					out("A");
					return;
				}
				now = a[an];
				an++;
			}
			if (now == 'b') {

				if (bn == bc) {
					out("B");
					return;
				}
				now = b[bn];
				bn++;
			}
			if (now == 'c') {

				if (cn == cc) {
					out("C");
					return;
				}
				now = c[cn];
				cn++;
			}

		} {

			if (now == 'a') {
				if (an == ac) {
					out("A");
					return;
				}
				now = a[an];
				an++;
			}
			if (now == 'b') {

				if (bn == bc) {
					out("B");
					return;
				}
				now = b[bn];
				bn++;
			}
			if (now == 'c') {

				if (cn == cc) {
					out("C");
					return;
				}
				now = c[cn];
				cn++;
			}

		} if (now == 'a') {
				if (an == ac) {
					out("A");
					return;
				}
				now = a[an];
				an++;
			} now == 'a' now 'a' {
				if (an == ac) {
					out("A");
					return;
				}
				now = a[an];
				an++;
			} if (an == ac) {
					out("A");
					return;
				} an == ac an ac {
					out("A");
					return;
				} out("A") out "A" return; now = a[an] now a[an] a an an++ an if (now == 'b') {

				if (bn == bc) {
					out("B");
					return;
				}
				now = b[bn];
				bn++;
			} now == 'b' now 'b' {

				if (bn == bc) {
					out("B");
					return;
				}
				now = b[bn];
				bn++;
			} if (bn == bc) {
					out("B");
					return;
				} bn == bc bn bc {
					out("B");
					return;
				} out("B") out "B" return; now = b[bn] now b[bn] b bn bn++ bn if (now == 'c') {

				if (cn == cc) {
					out("C");
					return;
				}
				now = c[cn];
				cn++;
			} now == 'c' now 'c' {

				if (cn == cc) {
					out("C");
					return;
				}
				now = c[cn];
				cn++;
			} if (cn == cc) {
					out("C");
					return;
				} cn == cc cn cc {
					out("C");
					return;
				} out("C") out "C" return; now = c[cn] now c[cn] c cn cn++ cn String[] args args /*
	 * 以下メソッド集
	 */
	static int ni() {
		return sc.nextInt();
	} ni {
		return sc.nextInt();
	} return sc.nextInt(); sc.nextInt() sc.nextInt sc static long nl() {
		return sc.nextLong();
	} nl {
		return sc.nextLong();
	} return sc.nextLong(); sc.nextLong() sc.nextLong sc static double nd() {
		return sc.nextDouble();
	} nd {
		return sc.nextDouble();
	} return sc.nextDouble(); sc.nextDouble() sc.nextDouble sc static String n() {
		return sc.next();
	} n {
		return sc.next();
	} return sc.next(); sc.next() sc.next sc static char[] nc() {
		return sc.next().toCharArray();
	} nc {
		return sc.next().toCharArray();
	} return sc.next().toCharArray(); sc.next().toCharArray() sc.next().toCharArray sc.next() sc.next sc static int kaijo(int n) {
		if (n == 0 || n == 1) {
			return 1;
		} else {
			return n * kaijo(n - 1);
		}
	} kaijo {
		if (n == 0 || n == 1) {
			return 1;
		} else {
			return n * kaijo(n - 1);
		}
	} if (n == 0 || n == 1) {
			return 1;
		} else {
			return n * kaijo(n - 1);
		} n == 0 || n == 1 n == 0 n 0 n == 1 n 1 {
			return 1;
		} return 1; 1 {
			return n * kaijo(n - 1);
		} return n * kaijo(n - 1); n * kaijo(n - 1) n kaijo(n - 1) kaijo n - 1 n 1 int n n static int fib(int n) {
		return (n == 1 || n == 0) ? n : fib(n - 2) + fib(n - 1);
	} fib {
		return (n == 1 || n == 0) ? n : fib(n - 2) + fib(n - 1);
	} return (n == 1 || n == 0) ? n : fib(n - 2) + fib(n - 1); (n == 1 || n == 0) ? n : fib(n - 2) + fib(n - 1) (n == 1 || n == 0) n == 1 n 1 n == 0 n 0 n fib(n - 2) + fib(n - 1) fib(n - 2) fib n - 2 n 2 fib(n - 1) fib n - 1 n 1 int n n static long lcm(long m, long n) {

		return m * n / gcd(m, n);
	} lcm {

		return m * n / gcd(m, n);
	} return m * n / gcd(m, n); m * n / gcd(m, n) m * n m n gcd(m, n) gcd m n long m m long n n static int lcm(int m, int n) {

		return m * n / gcd(m, n);
	} lcm {

		return m * n / gcd(m, n);
	} return m * n / gcd(m, n); m * n / gcd(m, n) m * n m n gcd(m, n) gcd m n int m m int n n static long gcd(long a, long b) {
		return (b == 0) ? a : gcd(b, a % b);
	} gcd {
		return (b == 0) ? a : gcd(b, a % b);
	} return (b == 0) ? a : gcd(b, a % b); (b == 0) ? a : gcd(b, a % b) (b == 0) b 0 a gcd(b, a % b) gcd b a % b a b long a a long b b static int gcd(int a, int b) {
		return (b == 0) ? a : gcd(b, a % b);
	} gcd {
		return (b == 0) ? a : gcd(b, a % b);
	} return (b == 0) ? a : gcd(b, a % b); (b == 0) ? a : gcd(b, a % b) (b == 0) b 0 a gcd(b, a % b) gcd b a % b a b int a a int b b static void out(String info) {
		System.out.println(info);
	} out {
		System.out.println(info);
	} System.out.println(info) System.out.println System.out System System.out info String info info static void out(int info) {
		System.out.println(info);
	} out {
		System.out.println(info);
	} System.out.println(info) System.out.println System.out System System.out info int info info static void out(double info) {
		System.out.println(info);
	} out {
		System.out.println(info);
	} System.out.println(info) System.out.println System.out System System.out info double info info static void out(long info) {
		System.out.println(info);
	} out {
		System.out.println(info);
	} System.out.println(info) System.out.println System.out System System.out info long info info static void out(char info) {
		System.out.println(info);
	} out {
		System.out.println(info);
	} System.out.println(info) System.out.println System.out System System.out info char info info static void out(Object obj) {
		System.out.println(obj.toString());
	} out {
		System.out.println(obj.toString());
	} System.out.println(obj.toString()) System.out.println System.out System System.out obj.toString() obj.toString obj Object obj obj static void outn(String info) {
		System.out.print(info);
	} outn {
		System.out.print(info);
	} System.out.print(info) System.out.print System.out System System.out info String info info static void outn(int info) {
		System.out.print(info);
	} outn {
		System.out.print(info);
	} System.out.print(info) System.out.print System.out System System.out info int info info static void outn(double info) {
		System.out.print(info);
	} outn {
		System.out.print(info);
	} System.out.print(info) System.out.print System.out System System.out info double info info static void outn(long info) {
		System.out.print(info);
	} outn {
		System.out.print(info);
	} System.out.print(info) System.out.print System.out System System.out info long info info static void outn(char info) {
		System.out.print(info);
	} outn {
		System.out.print(info);
	} System.out.print(info) System.out.print System.out System System.out info char info info static double max(double d, double e) {
		return Math.max(d, e);
	} max {
		return Math.max(d, e);
	} return Math.max(d, e); Math.max(d, e) Math.max Math d e double d d double e e static long max(long a, long b) {
		return Math.max(a, b);
	} max {
		return Math.max(a, b);
	} return Math.max(a, b); Math.max(a, b) Math.max Math a b long a a long b b static double min(double d, double e) {
		return Math.min(d, e);
	} min {
		return Math.min(d, e);
	} return Math.min(d, e); Math.min(d, e) Math.min Math d e double d d double e e static long min(long a, long b) {
		return Math.min(a, b);
	} min {
		return Math.min(a, b);
	} return Math.min(a, b); Math.min(a, b) Math.min Math a b long a a long b b class XY {
	int h;
	int c;

	XY(int h, int c) {
		this.h = h;
		this.c = c;
	}
} XY int h; h int c; c XY(int h, int c) {
		this.h = h;
		this.c = c;
	} XY {
		this.h = h;
		this.c = c;
	} this.h = h this.h this this.h h this.c = c this.c this this.c c int h h int c c public class Main {

	public static String Y = "Yes";
	public static String N = "No";
	public static long MOD = (long) (Math.pow(10, 9) + 7);
	public static Scanner sc = new Scanner(System.in);

	public static void main(String[] args) {
		char[] a = nc();
		char[] b = nc();
		char[] c = nc();

		int ac = a.length;
		int bc = b.length;
		int cc = c.length;

		int an = 0;
		int bn = 0;
		int cn = 0;

		char now = 'a';

		for (;;) {

			if (now == 'a') {
				if (an == ac) {
					out("A");
					return;
				}
				now = a[an];
				an++;
			}
			if (now == 'b') {

				if (bn == bc) {
					out("B");
					return;
				}
				now = b[bn];
				bn++;
			}
			if (now == 'c') {

				if (cn == cc) {
					out("C");
					return;
				}
				now = c[cn];
				cn++;
			}

		}
	}

	/*
	 * 以下メソッド集
	 */
	static int ni() {
		return sc.nextInt();
	}

	static long nl() {
		return sc.nextLong();
	}

	static double nd() {
		return sc.nextDouble();
	}

	static String n() {
		return sc.next();
	}

	static char[] nc() {
		return sc.next().toCharArray();
	}

	static int kaijo(int n) {
		if (n == 0 || n == 1) {
			return 1;
		} else {
			return n * kaijo(n - 1);
		}
	}

	static int fib(int n) {
		return (n == 1 || n == 0) ? n : fib(n - 2) + fib(n - 1);
	}

	static long lcm(long m, long n) {

		return m * n / gcd(m, n);
	}

	static int lcm(int m, int n) {

		return m * n / gcd(m, n);
	}

	static long gcd(long a, long b) {
		return (b == 0) ? a : gcd(b, a % b);
	}

	static int gcd(int a, int b) {
		return (b == 0) ? a : gcd(b, a % b);
	}

	static void out(String info) {
		System.out.println(info);
	}

	static void out(int info) {
		System.out.println(info);
	}

	static void out(double info) {
		System.out.println(info);
	}

	static void out(long info) {
		System.out.println(info);
	}

	static void out(char info) {
		System.out.println(info);
	}

	static void out(Object obj) {
		System.out.println(obj.toString());
	}

	static void outn(String info) {
		System.out.print(info);
	}

	static void outn(int info) {
		System.out.print(info);
	}

	static void outn(double info) {
		System.out.print(info);
	}

	static void outn(long info) {
		System.out.print(info);
	}

	static void outn(char info) {
		System.out.print(info);
	}

	static double max(double d, double e) {
		return Math.max(d, e);
	}

	static long max(long a, long b) {
		return Math.max(a, b);
	}

	static double min(double d, double e) {
		return Math.min(d, e);
	}

	static long min(long a, long b) {
		return Math.min(a, b);
	}
} public class Main {

	public static String Y = "Yes";
	public static String N = "No";
	public static long MOD = (long) (Math.pow(10, 9) + 7);
	public static Scanner sc = new Scanner(System.in);

	public static void main(String[] args) {
		char[] a = nc();
		char[] b = nc();
		char[] c = nc();

		int ac = a.length;
		int bc = b.length;
		int cc = c.length;

		int an = 0;
		int bn = 0;
		int cn = 0;

		char now = 'a';

		for (;;) {

			if (now == 'a') {
				if (an == ac) {
					out("A");
					return;
				}
				now = a[an];
				an++;
			}
			if (now == 'b') {

				if (bn == bc) {
					out("B");
					return;
				}
				now = b[bn];
				bn++;
			}
			if (now == 'c') {

				if (cn == cc) {
					out("C");
					return;
				}
				now = c[cn];
				cn++;
			}

		}
	}

	/*
	 * 以下メソッド集
	 */
	static int ni() {
		return sc.nextInt();
	}

	static long nl() {
		return sc.nextLong();
	}

	static double nd() {
		return sc.nextDouble();
	}

	static String n() {
		return sc.next();
	}

	static char[] nc() {
		return sc.next().toCharArray();
	}

	static int kaijo(int n) {
		if (n == 0 || n == 1) {
			return 1;
		} else {
			return n * kaijo(n - 1);
		}
	}

	static int fib(int n) {
		return (n == 1 || n == 0) ? n : fib(n - 2) + fib(n - 1);
	}

	static long lcm(long m, long n) {

		return m * n / gcd(m, n);
	}

	static int lcm(int m, int n) {

		return m * n / gcd(m, n);
	}

	static long gcd(long a, long b) {
		return (b == 0) ? a : gcd(b, a % b);
	}

	static int gcd(int a, int b) {
		return (b == 0) ? a : gcd(b, a % b);
	}

	static void out(String info) {
		System.out.println(info);
	}

	static void out(int info) {
		System.out.println(info);
	}

	static void out(double info) {
		System.out.println(info);
	}

	static void out(long info) {
		System.out.println(info);
	}

	static void out(char info) {
		System.out.println(info);
	}

	static void out(Object obj) {
		System.out.println(obj.toString());
	}

	static void outn(String info) {
		System.out.print(info);
	}

	static void outn(int info) {
		System.out.print(info);
	}

	static void outn(double info) {
		System.out.print(info);
	}

	static void outn(long info) {
		System.out.print(info);
	}

	static void outn(char info) {
		System.out.print(info);
	}

	static double max(double d, double e) {
		return Math.max(d, e);
	}

	static long max(long a, long b) {
		return Math.max(a, b);
	}

	static double min(double d, double e) {
		return Math.min(d, e);
	}

	static long min(long a, long b) {
		return Math.min(a, b);
	}
} Main
import java.util.Scanner;

public class Main {

	public static String Y = "Yes";
	public static String N = "No";
	public static long MOD = (long) (Math.pow(10, 9) + 7);
	public static Scanner sc = new Scanner(System.in);

	public static void main(String[] args) {
		char[] a = nc();
		char[] b = nc();
		char[] c = nc();

		int ac = a.length;
		int bc = b.length;
		int cc = c.length;

		int an = 0;
		int bn = 0;
		int cn = 0;

		char now = 'a';

		for (;;) {

			if (now == 'a') {
				if (an == ac) {
					out("A");
					return;
				}
				now = a[an];
				an++;
			}
			if (now == 'b') {

				if (bn == bc) {
					out("B");
					return;
				}
				now = b[bn];
				bn++;
			}
			if (now == 'c') {

				if (cn == cc) {
					out("C");
					return;
				}
				now = c[cn];
				cn++;
			}

		}
	}

	/*
	 * 以下メソッド集
	 */
	static int ni() {
		return sc.nextInt();
	}

	static long nl() {
		return sc.nextLong();
	}

	static double nd() {
		return sc.nextDouble();
	}

	static String n() {
		return sc.next();
	}

	static char[] nc() {
		return sc.next().toCharArray();
	}

	static int kaijo(int n) {
		if (n == 0 || n == 1) {
			return 1;
		} else {
			return n * kaijo(n - 1);
		}
	}

	static int fib(int n) {
		return (n == 1 || n == 0) ? n : fib(n - 2) + fib(n - 1);
	}

	static long lcm(long m, long n) {

		return m * n / gcd(m, n);
	}

	static int lcm(int m, int n) {

		return m * n / gcd(m, n);
	}

	static long gcd(long a, long b) {
		return (b == 0) ? a : gcd(b, a % b);
	}

	static int gcd(int a, int b) {
		return (b == 0) ? a : gcd(b, a % b);
	}

	static void out(String info) {
		System.out.println(info);
	}

	static void out(int info) {
		System.out.println(info);
	}

	static void out(double info) {
		System.out.println(info);
	}

	static void out(long info) {
		System.out.println(info);
	}

	static void out(char info) {
		System.out.println(info);
	}

	static void out(Object obj) {
		System.out.println(obj.toString());
	}

	static void outn(String info) {
		System.out.print(info);
	}

	static void outn(int info) {
		System.out.print(info);
	}

	static void outn(double info) {
		System.out.print(info);
	}

	static void outn(long info) {
		System.out.print(info);
	}

	static void outn(char info) {
		System.out.print(info);
	}

	static double max(double d, double e) {
		return Math.max(d, e);
	}

	static long max(long a, long b) {
		return Math.max(a, b);
	}

	static double min(double d, double e) {
		return Math.min(d, e);
	}

	static long min(long a, long b) {
		return Math.min(a, b);
	}
}

class XY {
	int h;
	int c;

	XY(int h, int c) {
		this.h = h;
		this.c = c;
	}
}
