#include<iostream>
#include <map>
#include <vector>
//用哈希表来记录
using namespace std;
const int N = 100010;
typedef pair<int, int> PII; //存储符合要求 <i , j>对
vector< PII > result;
int a[N];
int b[N];
int main()
{
int n,m,x;
cin >> n>>m>>x;
map<int , int> my_map;
for (int i = 1; i <= n; i ++ ) scanf("%d", &a[i]); //因为哈希表没有找到值默认返回的是0 预计O(max(m , n))
for (int i = 1; i <= m; i ++ ) scanf("%d", &b[i]);
//可以先用哈希表把A的元素存进去然后拿B的值一个一个比 时间复杂度是0(m + n)
//目标是调高到预计O(max(m , n))一半左右
int j = 1;
for (int i = 1; i <= n; i ++ )
{
if(my_map.find(x - a[i]) != my_map.end()) //说明已经有b存储进去了
{
result.push_back(make_pair(i-1 , my_map[x - a[i]] - 1) );
}
my_map[x - a[i]] = i; //更新哈希表 将A数组的值加入进去 因为同一数组的值不一样 但是不同数组之间可能存在一样的
//而后产生相对的可能性 (1 ,2 ,3) (3 , 2) x = 5
while (j <= i && j <= m)
{
if(my_map.find(b[j]) != my_map.end()) // a中存在于和b[j]满足条件的
{
result.push_back(make_pair(my_map[b[j]] - 1 ,j - 1));
}else{ //如果不存在那么就将B[j]的值增加进去
my_map[b[j]] = j;
}
j++;
}
}
if(j <= m)
{
for (; j <= m; j ++ )
{
if(my_map.find(b[j]) != my_map.end())
result.push_back(make_pair(my_map[b[j]] ,j));
}
}
for (int i = 0; i < result.size() ; i++ )
{
cout << result[i].first<<" "<<result[i].second<<endl;
}
return 0;
}