#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
using namespace std;

#define N 100000
#define mod_32(n) (n&((1<<5)-1))
int prime[(N>>5)+1];
 
void init(){
	memset(prime,-1,sizeof(prime));
	prime[0] = prime[0] - (1<<0) - (1<<1);
	for(int i=2;i*i <= N;i++){
		if( prime[i>>5] & (1 << mod_32(i)) ){
			for(int j=i*i;j<=N;j+=i){
				prime[j>>5] -= (prime[j>>5] & (1<<mod_32(j)));
			}
		}
	}
}
inline bool isprime(int n){
	return !!(prime[n>>5] & (1<<mod_32(n)));
}


int main(){
	init();
	vector<long long> p;
	for(int i = 2 ; i <= 100000 ; i++){
		if( isprime(i) ){
			p.push_back(i);
		}
	}
	long long m,a,b;
	while(scanf("%lld%lld%lld",&m,&a,&b) && m ){
		long long ans = 0;
		long long A = 0;
		
		for(int i = 0 ; i < p.size() ; i++){
			//cout << i << " " << m << " " << p[i] << endl;
			int j = upper_bound(p.begin()+i,p.end(),m/p[i]) - p.begin();
			j = upper_bound(p.begin()+i,p.begin()+j,p[i]*b/a) - p.begin() - 1;
			if( j < i ) continue;
			//cout << p[i] << " " << p[j] << endl;
			//cout << "OK" << p[i] << " " << p[j] << " " << 1.0 * p[i] / p[j] << endl;
			if( p[i] * p[j] > m ) continue;
			if( p[i] * p[j] <= m && a*p[j] <= p[i]*b){
				if( p[i]*p[j] > ans ){
					ans = p[i]*p[j];
					A = p[i];
				}
			}
		}
		cout << A << " " << ans / A << endl;
	}
	
}