#include <cstdio>
#include <algorithm>
#include <set>
using namespace std;
#define nmax 100010
#define ll long long
#define f first
#define s second
int n, nra, nrb, r, a[nmax], b[nmax], v[nmax], h, sol;
long long s;
multiset <pair <int, int> > st, sb;
int verif(int x)
{
int i, c=0;
for (i=1; i<=nra; i++)
c+=(x/a[i]);
// printf("%d %d\n",x,c);
return c>=n;
}
int search(ll st, ll dr)
{
long long m, r=0;
while (st<dr)
{
// printf("%d\n",r);
m=(st+dr)/2;
if (verif(m))
{
r=m;
dr=m-1;
} else st=m+1;
}
return r;
}
int main()
{
freopen("fabrica.in","r",stdin);
freopen("fabrica.out","w",stdout);
scanf("%d %d %d",&n, &nra, &nrb);
int i, j, y;
ll x=1<<30;
for (i=1; i<=nra; i++)
{
scanf("%d",&a[i]);
if (x>a[i]) x=a[i];
}
for (i=1; i<=nrb; i++) scanf("%d",&b[i]);
sort(a+1, a+nra+1);
s=(long long)((1<<30)-1)*2+1;
if (x*nra<s) s=x*n;
// printf("%d\n",s);
r=search(1, s);
for (i=1; i<=nra && h<=n; i++)
for (j=1; j<=r/a[i] && h<=n; j++)
v[++h]=j*a[i];
//for (i=1; i<=n; i++) printf("%d ",v[i]);
//// printf("\n");
sort(v+1, v+n+1);
for (i=1; i<=nrb; i++) sb.insert(make_pair(0, -b[i]));
//printf("%daaa\n",(*sb.begin()).f);
for (i=1; i<=n; i++)
{
x=-(*sb.begin()).s;
y=(*sb.begin()).f;
if (y<v[i]) y=v[i];
y=y+x;
// printf("%I64d %d\n",x,y);
if (y>sol) sol=y;
sb.erase(sb.begin());
sb.insert(make_pair(y, -x));
}
printf("%d %d",r, sol);
return 0;
}