/* Resenje takmicara Ivana Labata */


#include <cstdlib>
#include <iostream>

using namespace std;

class par
{
  public: 
    par() {};
    par(int ax, int ay, int as): x(ax), y(ay), s(as), rem(false) {};
    inline bool operator==(const par& rhs) const 
      {return (x == rhs.x && y == rhs.y);}
    inline bool operator<(const par& rhs) const
      {
        if (s < rhs.s) return true;
        if (s > rhs.s) return false;
        if (x < rhs.x) return true;
        if (x > rhs.x) return false;
        if (y < rhs.y) return true;
        return false;
      }
    int x,y,s;
    bool rem;
};

ostream & operator<< (ostream & o, const par & pr)
{
  char s[100];
  sprintf(s,"%(%d:%d,%d,%d)",pr.s,pr.x,pr.y,pr.rem);
  o << s;
}

int A = 0;
int B = 0;
int N = 0;
par * P;
par * Pn; //last+1
par * S;
par * Sn;


void 
read_from_file(const char * filename)
{
  FILE * fi = fopen(filename,"r");
  fscanf(fi,"%d %d %d",&A,&B,&N);
  fclose(fi);
}

void 
read_from_stdin()
{
  scanf("%d %d %d",&A,&B,&N);
}

inline void
add(int x, int y)
{
  Pn->x = x;
  Pn->y = y;
  Pn->s = x*y;
  Pn->rem = false;
  ++Pn;
  Sn->x = x;
  Sn->y = y;
  Sn->s = x+y;
  Sn->rem = false;
  ++Sn;
}

void 
make()
{
  int n = (B-A+1)*(B-A+2)/2;
  P = new par[n+5];  
  Pn = P;
  S = new par[n+5];  
  Sn = S;
  for (int i=A; i<=B; ++i)
    for (int j=i; j<=B; ++j)
      add(i,j);
  sort(P,Pn);
  sort(S,Sn);
}

void
rem(par p, par * s, par * sn)
{
  par * f = lower_bound(s, sn, p);
  if (*f == p)
    f->rem = true;
  else
    cerr << "No match for " << p << "lower bound is " << *f << endl;
}

void
remove_pro()
{
  par * n = P;
  par * l = P;
  while ((n < Pn) && (n->rem))
    ++n;
  while (n < Pn)
  {
    par * f = n;
    int c = 0;
    for (; f->s == n->s; ++n)
      if (!n->rem)
        ++c;
    if (c == 1)
    {
      rem(par(f->x, f->y, f->x + f->y), S, Sn);
    }
    else if (c > 1)
    {
      while (f < n)
      {
        if (!f->rem)
          *l++ = *f++;
        else
          ++f;
      }      
    }    
    while ((n < Pn) && (n->rem))
      ++n;
  }
  Pn = l;
}

void
remove_sim()
{
  par * n = S;
  par * l = S;
  while ((n < Sn) && (n->rem))
    ++n;
  while (n < Sn)
  {
    par * f = n;
    int c = 0;
    for (; f->s == n->s; ++n)
      if (!n->rem)
        ++c;
    if (c == 1)
    {
      rem(par(f->x, f->y, f->x * f->y), P, Pn);
    }
    else if (c > 1)
    {
      while (f < n)
      {
        if (!f->rem)
          *l++ = *f++;
        else
          ++f;
      }      
    }    
    while ((n < Sn) && (n->rem))
      ++n;
  }
  Sn = l;
}

void
find_pro()
{
  par * n = P;
  while ((n < Pn) && (n->rem))
    ++n;
  while (n < Pn)
  {
    par * f = n;
    int c = 0;
    for (; f->s == n->s; ++n)
      if (!n->rem)
        ++c;
    if (c == 1)
    {
      printf("%d %d\n",f->x, f->y);
    }
    while ((n < Pn) && (n->rem))
      ++n;
  }
}


void 
solve()
{
  for (int i=0; i<N; ++i)
  {
    remove_pro();
    remove_sim();
  } 
  find_pro();
}

int 
main(int argc, char *argv[])
{
  if (argc-1 >= 1)
    read_from_file(argv[1]);
  else
    read_from_stdin();
  make();
  solve();
  return EXIT_SUCCESS;
}
