//#include <bits/stdc++.h>
#include <iostream>
#include <climits>
#include <vector>
#include <cstdlib>
#include <iomanip>
#include <algorithm>
#include <cmath>
#include<math.h>
#include <set>
#include <time.h>
#include <map>
#include <fstream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <string>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <deque>
#include <algorithm>
#include <array>
#include <bitset>
#include <complex>
#include <numeric>
#include <unordered_map>
using namespace std;
#define sz(a) int((a).size())
#define ll long long
#define pb push_back
#define ld long double
#define mp make_pair
#define vi vector<ll>
#define all(c) (c).begin(),(c).end()
#define allr(c) (c).rbegin(),(c).rend()
#define For(i,n) for(ll i=0;i<n;i++)
#define cpresent(c,x) (find(all(c),x) != (c).end())
#define input(a,n) for(long long i=0;i<n;i++)cin>>a[i]
#define output(a,n) for(long long i=0;i<n;i++)cout<<a[i]<<" "
#define max3(a,b,c) max(max(a,b),c)
#define max4(a,b,c,d) max(max3(a,b,c),d)
#define min3(a,b,c) min(min(a,b),c)
#define min4(a,b,c,d) min(min3(a,b,c),d)
#define     she_taught_me_to_code cin.tie(0);cout.tie(0);ios_base::sync_with_stdio(false);cin.tie(NULL);
#define ep 1e-10
bool sortbysec(const pair<int,int> &a,const pair<int,int> &b)
{
    return (a.second < b.second);
}
ll gcd(ll a,ll b)
{
    if (b == 0)
    return a;
    return gcd(b, a % b);
}
ll lcm(ll a,ll b)
{
    return (a*b)/gcd(a,b);
}
ll pow2(ll n)
{
    ll x=1;
    for(ll i=1;i<=n;i++)
    {
        x*=2;
    }
    return x;
}
/*
#define N 1000000
vector<ll> adj[N];
vector<bool> visited(N,0);
vector<ll> color(N,0);
void DFSUtil(ll u,ll min)
{
    visited[u] = true;
    for (ll i=0; i<adj[u].size(); i++)
    {
        if (visited[adj[u][i]] == false)
        {
            DFSUtil(adj[u][i],min);
        }
    }
}
void DFS(ll n)
{
    for (ll u=0; u<n; u++)
    {
        if (visited[u] == false)
        {
            DFSUtil(u);
        }
    }
}
void aE(ll u, ll v)
{
    adj[u].push_back(v);
}
vector<ll> v(N,0);
vector<ll> segTree(N,0);
void build(ll low,ll high,ll pos)           // initial call is build(0,n-1,1);
{
    if(low==high)
    {
        segTree[pos]=v[low];
        return;
    }
    ll mid=(low+high)/2;
    build(low,mid,pos*2);
    build(mid+1,high,pos*2+1);
    segTree[pos]=segTree[pos*2]+segTree[pos*2+1];                       // should be modified
}
ll querry(ll low,ll high,ll l,ll r,ll pos)              // l and r start from 0
{
    if(l<=low && r>=high)
        return segTree[pos];
    else if(r<low || l>high)
        return 0;                                                       // should be modified
    ll mid=(low+high)/2;
    return querry(low,mid,l,r,2*pos)+querry(mid+1,high,l,r,2*pos+1);    // should be modified
}
void update(ll low,ll high,ll index,ll val,ll pos)      // l and r start from 0
{
    if(low==high)
    {
        v[index]=val;
        segTree[pos]=val;
    }
    else
    {
        ll mid =(low+high)/2;
        if(low<=index && index<=mid)
            update(low,mid,index,val,2*pos);
        else
            update(mid+1,high,index,val,2*pos+1);
        segTree[pos]=segTree[2*pos]+segTree[2*pos+1];                    // should be modified
    }
}*/
int main()
{
    she_taught_me_to_code

    ll n,a,b;
    cin>>n>>a>>b;
    cout<<min(a,b)<<" ";
    if(a+b<=n)
        cout<<0;
    else
        cout<<a+b-n;
}


Measured memory_bytes: 256