#include<iostream>
using namespace std;
int father[10005],c[10005],d[10005];
int mw[10005],f[10005],i,j,n,m,w,x,y;
int find(int x){
if(father[x]==x) return x;
return father[x]=find(father[x]);
}
void unite(int x,int y){ int rx=find(x);
int ry=find(y);
if(rx!=ry){
father[ry]=rx;
c[rx]+=c[ry];
d[rx]+=d[ry];
}
}
int main(){
cin.tie(nullptr); cin>>n>>m>>w;
for(i=1;i<=n;++i){
father[i]=i;
cin>>c[i]>>d[i];
}
for(i=1;i<=m;++i){
cin>>x>>y;
unite(x,y);
}
for(i=1;i<=n;++i){ x=find(i);
if(!f[x])f[x]=1; else continue;
int cx=c[x];
for(j=w;j>=cx;j--){
if(mw[j-cx]+d[x]>mw[j])mw[j]=mw[j-cx]+d[x];
}
}
cout<<mw[w];
return 0;
}