import java.util.*;
 
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int A = sc.nextInt();
        int B = sc.nextInt();
        int K = sc.nextInt();
  
      int a[] = new int[100];//配列100まで格納している
      int n = 0;//問題に該当する二つの数値を割り切れる数値の個数を定義している
      for(int i=1; i<=Math.min(A,B); i++){//1から、入力するA.Bどちらかの最小数値までを繰り返していく
      if(A%i==0 && B%i==0){//A.Bどちらでも割れる数値i
        n+=1;//i=1なのでnに1ずつ加算していく
        a[n] =i;//if文の条件に合うiの個数をa[n]に代入する
        }
      }
     System.out.println(a[n-K+1]);//大きい方からK番目に該当する数値を見つけるための式,a[n-K+1]番目に格納されている数値
    }
}
         import java.util.*; util.* java public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int A = sc.nextInt();
        int B = sc.nextInt();
        int K = sc.nextInt();
  
      int a[] = new int[100];//配列100まで格納している
      int n = 0;//問題に該当する二つの数値を割り切れる数値の個数を定義している
      for(int i=1; i<=Math.min(A,B); i++){//1から、入力するA.Bどちらかの最小数値までを繰り返していく
      if(A%i==0 && B%i==0){//A.Bどちらでも割れる数値i
        n+=1;//i=1なのでnに1ずつ加算していく
        a[n] =i;//if文の条件に合うiの個数をa[n]に代入する
        }
      }
     System.out.println(a[n-K+1]);//大きい方からK番目に該当する数値を見つけるための式,a[n-K+1]番目に格納されている数値
    }
} Main public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int A = sc.nextInt();
        int B = sc.nextInt();
        int K = sc.nextInt();
  
      int a[] = new int[100];//配列100まで格納している
      int n = 0;//問題に該当する二つの数値を割り切れる数値の個数を定義している
      for(int i=1; i<=Math.min(A,B); i++){//1から、入力するA.Bどちらかの最小数値までを繰り返していく
      if(A%i==0 && B%i==0){//A.Bどちらでも割れる数値i
        n+=1;//i=1なのでnに1ずつ加算していく
        a[n] =i;//if文の条件に合うiの個数をa[n]に代入する
        }
      }
     System.out.println(a[n-K+1]);//大きい方からK番目に該当する数値を見つけるための式,a[n-K+1]番目に格納されている数値
    } main {
		Scanner sc = new Scanner(System.in);
		int A = sc.nextInt();
        int B = sc.nextInt();
        int K = sc.nextInt();
  
      int a[] = new int[100];//配列100まで格納している
      int n = 0;//問題に該当する二つの数値を割り切れる数値の個数を定義している
      for(int i=1; i<=Math.min(A,B); i++){//1から、入力するA.Bどちらかの最小数値までを繰り返していく
      if(A%i==0 && B%i==0){//A.Bどちらでも割れる数値i
        n+=1;//i=1なのでnに1ずつ加算していく
        a[n] =i;//if文の条件に合うiの個数をa[n]に代入する
        }
      }
     System.out.println(a[n-K+1]);//大きい方からK番目に該当する数値を見つけるための式,a[n-K+1]番目に格納されている数値
    } Scanner sc = new Scanner(System.in); sc new Scanner(System.in) int A = sc.nextInt(); A sc.nextInt() sc.nextInt sc int B = sc.nextInt(); B sc.nextInt() sc.nextInt sc int K = sc.nextInt(); K sc.nextInt() sc.nextInt sc int a[] = new int[100]; a new int[100] 100 int n = 0; n 0 for(int i=1; i<=Math.min(A,B); i++){//1から、入力するA.Bどちらかの最小数値までを繰り返していく
      if(A%i==0 && B%i==0){//A.Bどちらでも割れる数値i
        n+=1;//i=1なのでnに1ずつ加算していく
        a[n] =i;//if文の条件に合うiの個数をa[n]に代入する
        }
      } int i=1; int i=1; i 1 i<=Math.min(A,B) i Math.min(A,B) Math.min Math A B i++ i++ i {//1から、入力するA.Bどちらかの最小数値までを繰り返していく
      if(A%i==0 && B%i==0){//A.Bどちらでも割れる数値i
        n+=1;//i=1なのでnに1ずつ加算していく
        a[n] =i;//if文の条件に合うiの個数をa[n]に代入する
        }
      } {//1から、入力するA.Bどちらかの最小数値までを繰り返していく
      if(A%i==0 && B%i==0){//A.Bどちらでも割れる数値i
        n+=1;//i=1なのでnに1ずつ加算していく
        a[n] =i;//if文の条件に合うiの個数をa[n]に代入する
        }
      } if(A%i==0 && B%i==0){//A.Bどちらでも割れる数値i
        n+=1;//i=1なのでnに1ずつ加算していく
        a[n] =i;//if文の条件に合うiの個数をa[n]に代入する
        } A%i==0 && B%i==0 A%i==0 A%i A i 0 B%i==0 B%i B i 0 {//A.Bどちらでも割れる数値i
        n+=1;//i=1なのでnに1ずつ加算していく
        a[n] =i;//if文の条件に合うiの個数をa[n]に代入する
        } n+=1 n 1 a[n] =i a[n] a n i System.out.println(a[n-K+1]) System.out.println System.out System System.out a[n-K+1] a n-K+1 n-K n K 1 String[] args args public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int A = sc.nextInt();
        int B = sc.nextInt();
        int K = sc.nextInt();
  
      int a[] = new int[100];//配列100まで格納している
      int n = 0;//問題に該当する二つの数値を割り切れる数値の個数を定義している
      for(int i=1; i<=Math.min(A,B); i++){//1から、入力するA.Bどちらかの最小数値までを繰り返していく
      if(A%i==0 && B%i==0){//A.Bどちらでも割れる数値i
        n+=1;//i=1なのでnに1ずつ加算していく
        a[n] =i;//if文の条件に合うiの個数をa[n]に代入する
        }
      }
     System.out.println(a[n-K+1]);//大きい方からK番目に該当する数値を見つけるための式,a[n-K+1]番目に格納されている数値
    }
} public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int A = sc.nextInt();
        int B = sc.nextInt();
        int K = sc.nextInt();
  
      int a[] = new int[100];//配列100まで格納している
      int n = 0;//問題に該当する二つの数値を割り切れる数値の個数を定義している
      for(int i=1; i<=Math.min(A,B); i++){//1から、入力するA.Bどちらかの最小数値までを繰り返していく
      if(A%i==0 && B%i==0){//A.Bどちらでも割れる数値i
        n+=1;//i=1なのでnに1ずつ加算していく
        a[n] =i;//if文の条件に合うiの個数をa[n]に代入する
        }
      }
     System.out.println(a[n-K+1]);//大きい方からK番目に該当する数値を見つけるための式,a[n-K+1]番目に格納されている数値
    }
} Main
import java.util.*;
 
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int A = sc.nextInt();
        int B = sc.nextInt();
        int K = sc.nextInt();
  
      int a[] = new int[100];//配列100まで格納している
      int n = 0;//問題に該当する二つの数値を割り切れる数値の個数を定義している
      for(int i=1; i<=Math.min(A,B); i++){//1から、入力するA.Bどちらかの最小数値までを繰り返していく
      if(A%i==0 && B%i==0){//A.Bどちらでも割れる数値i
        n+=1;//i=1なのでnに1ずつ加算していく
        a[n] =i;//if文の条件に合うiの個数をa[n]に代入する
        }
      }
     System.out.println(a[n-K+1]);//大きい方からK番目に該当する数値を見つけるための式,a[n-K+1]番目に格納されている数値
    }
}
        