func_code_string: #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;   }   