#include<stdio.h>
#include<algorithm>
using namespace std;
int dp[2][11000];
int d[600];
int e[600];
int f[600];
int g[600];
int w[1100];
pair<int,pair<int,int> > ev[1100];
int c;
int calc(){
	int ret=1010101010;
	int las=-1010101010;
	for(int i=0;i<=c;i++){
		if(~dp[0][i])las=i;
		if(~dp[1][i])ret=min(ret,i-las);
	}
	las=-1010101010;
	for(int i=0;i<=c;i++){
		if(~dp[1][i])las=i;
		if(~dp[0][i])ret=min(ret,i-las);
	}
	return ret;
}
int main(){
	int a,b;
	scanf("%d%d%d",&a,&b,&c);
	for(int i=0;i<a;i++)scanf("%d%d",d+i,e+i);
	for(int i=0;i<b;i++)scanf("%d%d",f+i,g+i);
	int n=0;
	for(int i=0;i<a;i++)ev[n++]=make_pair(e[i],make_pair(0,i));
	for(int i=0;i<b;i++)ev[n++]=make_pair(g[i],make_pair(1,i));
	std::sort(ev,ev+n);
	for(int i=0;i<n;i++){
		if(ev[i].second.first)w[i]=f[ev[i].second.second];
		else w[i]=d[ev[i].second.second];
	}
	int ret=1010101010;
	for(int i=0;i<11000;i++)dp[0][i]=dp[1][i]=-1;
	int L=0;
	int C=1010101010;
	int M=1010101010;
	for(int i=0;i<n;i++){
		int t=ev[i].second.first;
		
		for(int j=c;j>=0;j--){
			if(~dp[t][j]&&j+w[i]<=c)dp[t][j+w[i]]=max(dp[t][j+w[i]],dp[t][j]);
		}
		if(w[i]<=c)dp[t][w[i]]=max(dp[t][w[i]],i);
		int dis=calc();
		C=ev[i].first-ev[L].first;
	//	printf("%d %d: %d %d\n",L,i,C,dis);
		ret=min(ret,max(C,dis));
		while(L<i&&dis<C){
			for(int j=0;j<=c;j++){
				if(dp[0][j]==L)dp[0][j]=-1;
				if(dp[1][j]==L)dp[1][j]=-1;
			}
			L++;
			dis=calc();
			C=ev[i].first-ev[L].first;
//			printf("%d %d: %d %d\n",L,i,C,dis);
			ret=min(ret,max(C,dis));
		}
	}
	printf("%d\n",ret);
}