#include <bits/stdc++.h>
using namespace std;

/*<DEBUG>*/
#define tem template <typename 
#define can_shift(_X_, ...) enable_if_t<sizeof test<_X_>(0) __VA_ARGS__ 8, debug&> operator<<(T i)
#define _op debug& operator<<
tem C > auto test(C *x) -> decltype(cerr << *x, 0LL);
tem C > char test(...);
tem C > struct itr{C begin, end; };
tem C > itr<C> get_range(C b, C e) { return itr<C>{b, e}; }
struct debug{
#ifdef _LOCAL
	~debug(){ cerr << endl; }
	tem T > can_shift(T, ==){ cerr << boolalpha << i; return *this; }
	tem T> can_shift(T, !=){ return *this << get_range(begin(i), end(i)); }
	tem T, typename U > _op (pair<T, U> i){ 
		return *this << "< " << i.first << " , " << i.second << " >"; }
	tem T> _op (itr<T> i){
		*this <<  "{ ";
		for(auto it = i.begin; it != i.end; it++){
			*this << " , " + (it==i.begin?2:0) << *it;
		}
		return *this << " }";
	}
#else
tem T> _op (const T&) { return *this; }
#endif 
};

string _ARR_(int* arr, int sz){
	string ret = "{ " + to_string(arr[0]); 
	for(int i = 1; i < sz; i++) ret += " , " +  to_string(arr[i]);
	ret += " }"; return ret;
}

#define exp(...) " [ " << #__VA_ARGS__ << " : " << (__VA_ARGS__) << " ]"
/*</DEBUG>*/

typedef long long ll;
typedef unsigned long long ull;
typedef unsigned int uint;
typedef pair<int, int> pii;
//mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());

#define pb push_back
#define FAST ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define TC int __TC__; cin >> __TC__; while(__TC__--)
#define ar array

const int INF = 1e9 + 7, N = 5e5;

ll x, y;
ll extended_euclid(ll a, ll b){
	if(b == 0){
		x = 1;
		y = 0;
		return a;
	}

	ll g = extended_euclid(b, a%b);
	ll nx, ny;
	nx = y;
	ny = x - (a/b)*y;
	x = nx;
	y = ny;
	return g;
}

ll a[N], b[N], g=0, l, sum=0;
vector<ll> same;
map<ll, ll> pos, issame;


int main(void)
{
	FAST;
	ll n, m, k;
	cin >> n >> m >> k;
	for(int i = 0; i < n; ++i) cin >> a[i];
	for(int i = 0; i < m; ++i) cin >> b[i];

	if(m < n){ 
		swap(m, n);
		swap(a,b);
	}
	// n <= m
	// a is shorter than b

	for(int i = 0; i < m; ++i) pos[b[i]] = i;

	g = extended_euclid(n,m);
	l = n*m/g;
	debug() << exp(x) exp(y);

	ll posx, negx;
	if(x == 0){
		x += m;
		y -= n;
	}

	if(x < 0){
		negx = x;
		// n*x + m*y = g
		
		//x += m;
		//y -= n;

		ll times = (abs(x) + m)/m;
		x += times*m;
		y -= times*n;
		posx = x;
	}else{
		posx = x;
		ll times = (x + m)/m;

		x -= times*m;
		y += times*n;

		negx = x;
	}
	debug() << exp(x) exp(y);
	// x > 0

	for(ll i = 0; i < n; ++i){
		if(pos.find(a[i]) != pos.end()){
			ll p = pos[a[i]];
			ll c = p - i;

			if(c == 0){
				same.pb(i);
				issame[i] = 1;
			}else if(c<0 && abs(c) % g == 0){
				c = abs(c);
				ll times = c/g;
				ll pos = (-negx*times)*n + i;
				pos %= l;

				same.pb(pos);
				issame[pos] = 1;
			}else if(c % g == 0){
				ll times = c/g;
				ll pos = (posx * times) * n + i;
				pos %= l;

				same.pb(pos);
				issame[pos] = 1;
			}
		}
	}

	sort(same.begin(), same.end());
	sum = n*(m/g) - same.size();
	debug() << exp(same) exp(same.size());

	ll ans = 0;
	ans += l*(k/sum);
	k = (k%sum);

	if(k == 0){
		ans -= l;
		k += sum;
	}

	--k;
	// -> k = {0, 1, 2,..., sum-1}
	ll pos = k;
	// -> find the pos of the kth collision	
	
	auto it = lower_bound(same.begin(), same.end(), k);
	ll diff = 0;
	ll mv = (it - same.begin());

	while(diff < mv || issame[pos]){
		if(!issame[pos]) diff++;
		pos++;
	}

	ans += pos+1; // off by one error?;

	cout << ans << '\n';

	return 0;
}
