#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
ll n,m,w,dp[1001011];
struct NODE
{
int fa,sz;
ll cos,val;
bool operator<(const NODE&x)const
{
if(fa!=x.fa)
{
return fa<x.fa;
}
else
{
return sz>x.sz;
}
}
}node[111111];
int f_ind(int x)
{
return node[x].fa=x==node[x].fa?x:f_ind(node[x].fa);
}
int main()
{
cin>>n>>m>>w;
for(int i=1;i<=n;i++)
{
cin>>node[i].cos>>node[i].val;
node[i].fa=i;
node[i].sz=1;
}
for(int i=1;i<=m;i++)
{
int x,y;
cin>>x>>y;
int fx=f_ind(x),fy=f_ind(y);
if(fx==fy)continue;
node[fx].sz+=node[fy].sz;
node[fx].cos+=node[fy].cos;
node[fx].val+=node[fy].val;
node[f_ind(y)].fa=node[f_ind(x)].fa;
}
sort(node+1,node+1+n);
cout<<endl<<endl<<endl<<endl;////////////////////
for(int i=1;i<=n;i++)
{
cout<<node[i].fa<<" "<<node[i].sz<<endl;
}
int last=-1;
for(int i=1;i<=n;i++)
{
// if(node[i].fa==last)continue;
// last=node[i].fa;
if(node[i].fa!=i)continue;
for(int j=w;j>=node[i].cos;j--)
{
dp[j]=max(dp[j],dp[j-node[i].cos]+node[i].val);
}
}
cout<<dp[w];
return 0;
}