#include<bits/stdc++.h>
using namespace std;
inline int read(void)
{
char c=getchar(),f=1,x=0;
while(c>'9'||c<'0')
{
if(c=='-')f=-f;
c=getchar();
}
while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();
return x*f;
}
const int N=11000;
int n,m,val;
int tot,father[N];
int w[N],f[N],v[N];
int x,y;
int find(int x)
{
if(father[x]!=x)return father[x]=find(father[x]);
return x;
}
int main(void)
{
n=read();m=read();val=read();
father[0]=0;
for(int i=1;i<=n;i++)
{
w[i]=read();
v[i]=read();
father[i]=i;
}
for(int i=1;i<=m;i++)
{
x=read();
y=read();
int fx=find(x),fy=find(y);
if(fx!=fy)
{
father[fy]=fx;w[fx]+=w[fy];v[fx]+=v[fy];
}
}
for(int i=1;i<=n;i++)
{
if(father[i]==i)
{
w[++tot]=w[i];
v[tot]=v[i];
}
}
for(int i=1;i<=tot;i++)
{
for(int j=val;j>=w[i];j--)f[j]=max(f[j-w[i]]+v[i],f[j]);
}
cout<<f[val];
return 0;
}
求助!!!